我正在使用EF 6.0和SQL Server 2012 Express。 我使用DbContext.DbSet.AddRange(IEnumerable)和SaveChanges()将10,000条记录保存到数据库。
我注意到当调用SaveChanges()时,SQL Server保持连接。 SQL Server的其他操作必须等到保存10,00条记录。
在这种情况下,我不希望SQL Server锁定连接。我想查询另一个表中的数据,或者从正在更新的同一个表中读取。
如何为SQL Server启用并行?或者可以这样做吗?
答案 0 :(得分:1)
要阻止SaveChanges()
阻止当前线程,您可以使用SaveChangesAsync()
。此操作将阻止DbContext
的实例,但不阻止当前线程或数据库本身。如果您每个请求使用new DbContext()
,那就足够了。否则你应该使用新的上下文进行长插入:
using(var Ctx = new MyDbContext()) {
///Add or update objects here
Ctx.MyDbSet.AddRange(LargeList);
Ctx.SaveChangesAsync();
}
请记住,从您插入的表中进行选择可能会产生意外结果,具体取决于是否在asyc插入完成之前或之后发生了选择。