允许使用EntityFramework的SQL Server并发模式SaveChanges()

时间:2014-04-21 01:43:40

标签: c# sql sql-server entity-framework concurrency

我正在使用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启用并行?或者可以这样做吗?

1 个答案:

答案 0 :(得分:1)

要阻止SaveChanges()阻止当前线程,您可以使用SaveChangesAsync()。此操作将阻止DbContext的实例,但不阻止当前线程或数据库本身。如果您每个请求使用new DbContext(),那就足够了。否则你应该使用新的上下文进行长插入:

  using(var Ctx = new MyDbContext()) {
     ///Add or update objects here
     Ctx.MyDbSet.AddRange(LargeList);
     Ctx.SaveChangesAsync();
  }

请记住,从您插入的表中进行选择可能会产生意外结果,具体取决于是否在asyc插入完成之前或之后发生了选择。