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