更新内存优化表[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更新内存优化表[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我在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

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

答案

实体框架为您在事务中包装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

以上是关于更新内存优化表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在tablayout片段之间进行通信[重复]

mongodb性能优化

SQLServer 2014 内存优化表

GCC优化内存访问[重复]

In-Memory:内存优化表的事务处理

如何使用列表视图在选项卡式活动的片段中呈现 SQLite 表数据 [重复]