EntityDbContext SaveChanges :这两个代码有啥区别?
Posted
技术标签:
【中文标题】EntityDbContext SaveChanges :这两个代码有啥区别?【英文标题】:EntityDbContext SaveChanges : What are the differences between these two codes?EntityDbContext SaveChanges :这两个代码有什么区别? 【发布时间】:2020-03-29 02:28:41 【问题描述】:为了性能,异常捕获等,这两个代码有什么区别:
int count = 0;
foreach (var record in SomeDbEntityList)
count++;
dbContext.SomeDbEntity.Add(record);
if (count > 500)
dbContext.SaveChanges();
count = 0;
//LeftOver
if (count > 0)
dbContext.SaveChanges();
直接代码:
foreach (var record in SomeDbEntityList)
dbContext.SomeDbEntity.Add(record);
dbContext.SaveChanges();
【问题讨论】:
【参考方案1】:-
第一个代码在 500(或更少)之后将新更改保存在 DB 上
记录是实体,因此对数据库进行了 500 次更新/插入
同时。
优点:您不会针对数据库中的每条记录。
缺点:如果这些记录中的任何一个有错误(问题),则不会更新任何记录。
第二个代码直接保存到数据库。
请看Unit of Work设计模式。
【讨论】:
以上是关于EntityDbContext SaveChanges :这两个代码有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
何时在 EF 6 中使用 BeginTransaction? vs SaveChanges [重复]
DbSet.Attach(实体)与DbContext.Entry(实体).State = EntityState.Modified 区别