C# 实体框架能否生成更新。。。SQL中的WHERE语句?

C# 实体框架能否生成更新。。。SQL中的WHERE语句?,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,使用实体框架和存储库模式为内部企业MVC应用程序构建数据访问层。在某些情况下,我需要用SQLServer2008R2数据库中的大约1亿行更新表中的10万行 我正在使用EF6,目标是我们正在重构的现有遗留数据库。我不熟悉实体框架,但对SQL Server有丰富的经验 无论我如何构造我的update语句,当我运行一个探查器时,我会看到60k个ID的单独更新。这可能需要5分钟来运行。然而,我要说的是一个“批号”,它是为这些记录编制索引的。有没有办法用EF生成的where子句更新这些记录?我的解决方案是

使用实体框架和存储库模式为内部企业MVC应用程序构建数据访问层。在某些情况下,我需要用SQLServer2008R2数据库中的大约1亿行更新表中的10万行

我正在使用EF6,目标是我们正在重构的现有遗留数据库。我不熟悉实体框架,但对SQL Server有丰富的经验


无论我如何构造我的update语句,当我运行一个探查器时,我会看到60k个ID的单独更新。这可能需要5分钟来运行。然而,我要说的是一个“批号”,它是为这些记录编制索引的。有没有办法用EF生成的where子句更新这些记录?我的解决方案是只编写一个简单的sp,然后进行EF调用。

当前版本中的Entity Framework不支持您想要的批量操作。每次更新或删除每个记录都是一个单独的事务。为了避免这种情况,如果您不想经历创建存储过程的麻烦,可以直接从Entity Framework运行SQL(尽管它们很容易启动和运行)


注意参数的用法,它使用的语法看起来非常类似于
string.Format()
。有关详细信息,请参阅。

EntityFramework不执行批处理操作。每个操作将是数据库中每个记录上的一个操作(如您所发现的)您可以通过EntityFramework编写和执行您自己的SQL语句,也可以调用存储过程并通过EntityFramework传递适当的参数。根据我的经验,对于这样的“大型”操作,我会使用SP。当前的EF v6版本不支持批处理操作,但EF团队在EF v7和它上下了很大的功夫最终将支持批处理操作。现在,你要么求助于自己的解决方案,要么看看第三方解决方案,比如谢谢。我的直觉让我避开.cs文件中的SQL文本,但我理解这个概念。当我们使用实体框架来更新已知“大”表上的多行时,始终使用存储过程,这基本上就是我们的实践。我有一个通用的数据存储库模式,对于“TableA”,我添加了一个新方法来调用存储过程到“TableARepository”类。
using (var context = new MyDbContext())
{
    context.ExecuteStoreCommand("Update MyTable Set Value = {0} Where SomeColumn = {1}", 
                                updateValue, queryValue);
    context.ExecuteStoreCommand("Delete From MyTable Where value = {0}", 
                                myValueToQueryBy);
}