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 :这两个代码有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

entity framework 公共类

利用Entity Framework修改指定字段中的值

何时在 EF 6 中使用 BeginTransaction? vs SaveChanges [重复]

DbSet.Attach(实体)与DbContext.Entry(实体).State = EntityState.Modified 区别