首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Azure函数中使用实体框架核心记录插入失败(在开发环境中工作)

在Azure函数中使用实体框架核心记录插入失败(在开发环境中工作)
EN

Stack Overflow用户
提问于 2021-12-16 10:43:43
回答 1查看 113关注 0票数 0

我有一个Azure函数v4应用程序,它读取一个csv文件,并使用6在Azure数据库中填充几个表。

Startup.cs ->注入数据库和服务到应用程序

代码语言:javascript
代码运行次数:0
运行
复制
builder.Services.AddDbContext<DbContext>(options => 
  options.UseSqlServer(DatabaseConnectionString, sqloptions => sqloptions.CommandTimeout(1000)) ); 

builder.Services.AddTransient<IClientService, ClientService>();

ClientService.cs

代码语言:javascript
代码运行次数:0
运行
复制
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

代码语言:javascript
代码运行次数:0
运行
复制
[FunctionName("ImportCsVToAzureSqlDB")]
public async Task RunAsync([TimerTrigger("0 0 1 * * *")] TimerInfo myTimer, ILogger log, ExecutionContext context)
{
  _clientService.Process();
}

我一直使用AppInsights作为记录器,记录器在EFCore的日志记录消息之间停止。我做错什么了?

更新

下面是配置文件的内容

host.json

代码语言:javascript
代码运行次数:0
运行
复制
{
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    }
  },
  "version": "2.0"
}

local.settings.json

代码语言:javascript
代码运行次数:0
运行
复制
{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "AzureSqlDB": "<Connection string>",
  },
}
EN

回答 1

Stack Overflow用户

发布于 2022-01-04 16:53:52

我发现了这个问题,其实这个问题在一些记录上是一个简单的FK违规行为。问题是实体框架没有抛出错误,运行只是突然停止。这是我如何得到异常,以防其他人面临同样的问题。您需要为每个表插入创建单独的上下文,一旦我这样做,错误就会出现。我不知道为什么EF核心会这样做。在修复了FK问题之后,我能够使用常规代码运行。

代码语言:javascript
代码运行次数:0
运行
复制
    using (var context = new DbContext()) 
    { 
        foreach(..)
        {
          // insert table 1
        }

        context.SaveChanges(); 
    }
    
    using (var context = new DbContext()) 
    { 
        foreach(..)
        {
          // insert table 2
        }

        context.SaveChanges(); 
    }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70377632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档