我正在使用Entity Framework 4.0。现在我需要限制对表的访问,当我从中读取或写入时。可能是关于事务隔离级别的。
我该怎么做?
更新
这是我所拥有的
using (var db = new MyDb())
{
using (TransactionScope scope = new TransactionScope())
{
var item = db.MyItems.Single(x => x.Id == 5);
item.Price = 12;
db.SaveChanges();
scope.Complete();
}
}
但是,当我在using (TransactionScope scope
内的任何一行放置一个断点时,当我停在那里然后我去一个Sql Server Management Studio并从一个表中执行一个select查询(甚至更新!)在事务中使用,我出于某种原因没有收到错误。但为什么?它必须不允许我在事务执行时读取数据。
答案 0 :(得分:28)
默认情况下,事务的Serializable为IsolationLevel。 Serializable是最高级别。它要求在允许任何其他事务对数据进行操作之前完成事务。
它有以下限制:
这是一篇很棒的博文,解释了如何将交易与实体框架结合使用:Entity Framework transaction scope examples
在Entity Framework 6中,对于使用Code First创建的数据库,默认的IsolationLevel更改为READ_COMMITTED_SNAPSHOT,可能允许更多的可伸缩性和更少的死锁。请参阅future spec of EF 6