【问题标题】:Record update limit - LINQ [closed]记录更新限制 - LINQ [关闭]
【发布时间】:2018-04-13 01:23:05
【问题描述】:

我想知道使用 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 条记录,查询会执行还是崩溃?

【问题讨论】:

标签: c# linq


【解决方案1】:

我建议使用带有合并语句的存储过程,以防您想进行事务处理,否则使用简单的 SQL 存储过程来执行此操作。

最好的方法是使用 SQL 服务器的 SqlBulkCopy。实体框架不是为大批量操作而设计的。 SqlBulkCopy 将提供更优化的性能。

【讨论】:

    【解决方案2】:

    这个查询可以带回 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),尝试一切并学习!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-13
      • 2016-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多