记录更新限制 - LINQ

时间:2018-04-13 01:23:06

标签: c# linq

我想知道使用LINQ一次可以更新和提交的记录数量是否有限制,我的查询看起来像?

var reports = prdb.Reports
              .Where(w => w.FileYear == FileYear)
              .AsQueryable();

foreach (var r in reports)
{
    // update the report teacher name field
    var user = syndb.GetUser(r.CreatedBy);
    string strTeacherName = user.given + " " + user.Surname;
    r.TeacherName = strTeacherName;
}
prdb.SubmitChanges();

此查询可能会带回1000条记录,查询是执行还是崩溃?

2 个答案:

答案 0 :(得分:1)

我建议使用带有merge语句的存储过程,以防你想要创建事务,而不是简单的SQL存储过程来执行此操作。

最好的方法是使用SQL Server的SqlBulkCopy。实体框架不适用于大型批量操作。 SqlBulkCopy将提供更优化的性能。

答案 1 :(得分:1)

  

此查询可以带回1000条记录,查询是否会执行   或者崩溃?

这取决于很多因素:你有足够的公羊吗?你在Element 1001得到NullReferenceException吗? 3分钟后你会得到一个事务超时(如果在DB上工作)?

简单的答案是:如果环境条件合适,你甚至可以使用1亿条记录。

在国外稍微回答一下这个问题(我想你正在对数据库进行查询):我猜你正在寻找一种最有效的方法。如果您需要更新一百万个具有固定值或值的记录,具体取决于行中的另一个值,请使用sth。喜欢 update table set teachername = (select surname || ', ' || lastname from users where userid = table.teacherid);并通过Context.Database.ExecuteSqlCommand("..")执行。数据库本身通过同步更新它们更快,然后上面的LinQ程序更新每个条目(每个语句1个)。

如果您根据用户输入或其他内容获得了复杂的操作和个别更新,您可能需要这样做,即通过EF和LinQ查询。

做测试(使用Stopwatch),尝试一切并学习!