gpt4 book ai didi

c# - Entity Framework 更新/插入多个实体

转载 作者:可可西里 更新时间:2023-11-01 08:42:53 25 4
gpt4 key购买 nike

只是我要完成的事情的概述。我们在我们的应用程序中保留远程数据库(第 3 方)的本地副本。我们使用 api 下载信息。我们目前按计划下载信息,然后将新记录插入本地数据库或更新现有记录。这是它目前的工作方式

public void ProcessApiData(List<Account> apiData)
{
// get the existing accounts from the local database
List<Account> existingAccounts = _accountRepository.GetAllList();

foreach(account in apiData)
{
// check if it already exists in the local database
var existingAccount = existingAccounts.SingleOrDefault(a => a.AccountId == account.AccountId);

// if its null then its a new record
if(existingAccount == null)
{
_accountRepository.Insert(account);
continue;
}

// else its a new record so it needs updating
existingAccount.AccountName = account.AccountName;

// ... continue updating the rest of the properties
}

CurrentUnitOfWork.SaveChanges();
}

这很好用,但感觉还可以改进。

  1. 每个实体都有一个这些方法,它们都做同样的事情(只是更新不同的属性)或插入不同的实体。无论如何,是否可以使它更通用?
  2. 似乎有很多数据库调用,无论如何“批量”执行此操作。我看过这个包,我在其他一些帖子中看到过它 https://github.com/loresoft/EntityFramework.Extended但它似乎专注于批量更新具有相同值的单个属性,或者我可以这么说。

任何关于我如何改进它的建议都会很棒。我对 C# 还是很陌生,所以我仍在寻找最好的做事方式。

我正在使用 .net 4.5.2 和 Entity Framework 6.1.3 以及 MSSQL 2014 作为后端数据库

最佳答案

对于 EFCore,您可以使用此库:
https://github.com/borisdj/EFCore.BulkExtensions
注意:我是这本书的作者。

对于 EF 6,这个:
https://github.com/TomaszMierzejowski/EntityFramework.BulkExtensions

两者都使用批量操作扩展 DbContext 并且具有相同的语法调用:

context.BulkInsert(entitiesList);
context.BulkUpdate(entitiesList);
context.BulkDelete(entitiesList);

EFCore 版本有额外的 BulkInsertOrUpdate 方法。

关于c# - Entity Framework 更新/插入多个实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39656794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com