有关使用Entity Framework进行更新的问题

时间:2015-03-17 14:13:54

标签: entity-framework

我仍然在了解Entity Framework的所有细节,我目前发现它可以直接使用Entity Framework的ExecuteSqlCommand进行一些批量更新,因为它非常重要处理数千次更新时更快(特别是当我只需要更新单个字段时)。我的问题有两个方面:首先,这是一种安全的方式来处理我的更新吗?据我所知,通过EF更新的标准方法就像是

            if (user != null)
            {
                _Context.Entry(user).CurrentValues.SetValues(updatedUser);

                _Context.SaveChanges();
            }

            {
                _Context.Entry(updatedUser).State = EntityState.Modified;

                _Context.SaveChanges();
            }

但如果要更新的用户数超过~5000,这两种方法都会陷入困境。我错过了什么,或者我对ExecuteSqlCommand的使用是否可以接受?

其次,如果依赖ExecuteSqlCommand是安全的,我是否可以坚持其唯一目的是完成此任务的上下文,而不是每次需要时重新创建它?我的理解是,一般情况下,情境永远不应该保持,因为它们随着时间的推移会随着使用而减慢,但是我想知道这种情况是否适用于这种限制使用场景。

如果我使用EF的基本方法是错误的,我会很感激有人指出这一点。谢谢!

1 个答案:

答案 0 :(得分:0)

EF根本不能很好地处理批量操作,workarounds喜欢通过ExecuteSqlCommand手写查询(如你所提到的),或者有EntityFramework.Extended等第三方扩展。

对于你的第二部分,如果你打算使用上下文,那就是打电话给ExecuteSqlCommand,最好是按需提升普通SqlConnectionSqlCommand并使用它们(即使你每次打电话都要新建它们,.NET将使用" Connection Pooling"在幕后重用连接)