只是我要完成的事情的概述。 我们在我们的应用程序中保留远程数据库(第 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();
}
这很好用,但感觉还可以改进。
- 每个实体都有一个这些方法,它们都做同样的事情(只是更新不同的属性)或插入不同的实体。无论如何,是否可以使它更通用?
- 似乎有很多数据库调用,无论如何“批量”执行此操作。我看过这个包,我在其他一些帖子中看到过它 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/