我有一个Azure函数v4应用程序,它读取一个csv文件,并使用6在Azure数据库中填充几个表。
Startup.cs ->注入数据库和服务到应用程序
builder.Services.AddDbContext<DbContext>(options =>
options.UseSqlServer(DatabaseConnectionString, sqloptions => sqloptions.CommandTimeout(1000)) );
builder.Services.AddTransient<IClientService, ClientService>();
ClientService.cs
public class ClientService()
{
...
public ClientService(DBContext dbContext)
{
_dbContext = dbContext;
}
..
public void Process()
{
var fileRecords = //gets file records
...
// Insert to table 1
foreach(var item in fileRecords)
{
_dbContext.table1.add(item);
}
_dbContext.SaveChanges(); // Inserts 70 records
...
// Insert to table 2
foreach(var item in fileRecords)
{
_dbContext.table2.add(item);
// Save changes inside for each
// inserts 100 records
//_dbContext.SaveChanges();
}
// Save changes outside for each
// inserts 0 records
_dbContext.SaveChanges();
}
}
Function.cs
[FunctionName("ImportCsVToAzureSqlDB")]
public async Task RunAsync([TimerTrigger("0 0 1 * * *")] TimerInfo myTimer, ILogger log, ExecutionContext context)
{
_clientService.Process();
}
我一直使用AppInsights作为记录器,记录器在EFCore的日志记录消息之间停止。我做错什么了?
更新
下面是配置文件的内容
host.json
{
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
}
}
},
"version": "2.0"
}
local.settings.json
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"AzureSqlDB": "<Connection string>",
},
}
发布于 2022-01-04 16:53:52
我发现了这个问题,其实这个问题在一些记录上是一个简单的FK违规行为。问题是实体框架没有抛出错误,运行只是突然停止。这是我如何得到异常,以防其他人面临同样的问题。您需要为每个表插入创建单独的上下文,一旦我这样做,错误就会出现。我不知道为什么EF核心会这样做。在修复了FK问题之后,我能够使用常规代码运行。
using (var context = new DbContext())
{
foreach(..)
{
// insert table 1
}
context.SaveChanges();
}
using (var context = new DbContext())
{
foreach(..)
{
// insert table 2
}
context.SaveChanges();
}
https://stackoverflow.com/questions/70377632
复制相似问题