正在更新内存优化表



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

using (var context = new MyDbEntities((({    var 用户 = 上下文。Users.Single(p => p.UserId == 1(;    用户。名字 ="约翰";    上下文。保存更改((;}

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

仅自动提交事务支持使用 READ COMMIT 隔离级别访问内存优化表。显式或隐式事务不支持它。使用表提示(如 WITH(快照((为内存优化表提供受支持的隔离级别。

我尝试更改数据库上的一些选项,例如:

更改数据库 MyDb 设置为 ALLOW_SNAPSHOT_ISOLATION ON

还在我的代码中使用具有快照隔离的事务,但没有任何实现。

实体框架将 SaveChanges(( 调用包装在事务中,默认情况下事务的隔离级别(对于 SQL Server(已提交读取。

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

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

最新更新