我想知道使用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条记录,查询是执行还是崩溃?
答案 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),尝试一切并学习!