更新内存优化表

时间:2018-01-04 09:07:46

标签: c# entity-framework-6 sql-server-2017 memory-optimized-tables

我在SQL Server 2017中有一个名为“User”的内存优化表 我要将行更新为:

using (var context = new MyDbEntities())
{
    var user = context.Users.Single(p => p.UserId == 1);
    user.Name = "John";
    context.SaveChanges();
}

在SaveChanges()语句中,出现此异常:

  

仅对自动提交事务支持使用READ COMMITTED隔离级别访问内存优化表。显式或隐式事务不支持它。使用表提示为内存优化表提供支持的隔离级别,例如WITH(SNAPSHOT)。

我已尝试更改数据库中的某些选项,例如:

alter database MyDb set ALLOW_SNAPSHOT_ISOLATION ON

在我的代码中也使用带有快照隔离的事务,但没有实现。

1 个答案:

答案 0 :(得分:-1)

实体框架为您调整SaveChanges()调用,默认情况下事务的隔离级别(对于SQL Server)READ COMMITTED。

您可以自己将实体框架代码包装在事务中,例如:

using (var conn = new SqlConnection("...")) 
{ 
    conn.Open(); 
    using (var sqlTxn = conn.BeginTransaction(System.Data.IsolationLevel.Snapshot)) 
    { 
        using (var context =  new MyDBEntities(conn, contextOwnsConnection: false)) 
        { 
            context.Database.UseTransaction(sqlTxn);
            // ...
        }

    }
}

请参阅文档:https://msdn.microsoft.com/en-us/library/dn456843(v=vs.113).aspx