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