我在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
在我的代码中也使用带有快照隔离的事务,但没有实现。
答案 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