我正在测试EF6隔离级别,但测试失败了:
Assert.AreEqual failed. Expected:<ReadUncommitted>. Actual:<Unspecified>.
测试:
public void TestIsolationLevelReadUncommitted()
{
// Arrange
using (
new TransactionScope(TransactionScopeOption.Required,
new TransactionOptions {IsolationLevel = IsolationLevel.ReadUncommitted}))
{
using (var context = new BoligEntities())
{
// Act
context.GetDbConnection().Open();
var isolationLevel = context.GetDbConnection().GetIsolationLevel();
// Assert
Assert.AreEqual(System.Data.IsolationLevel.ReadUncommitted, isolationLevel);
}
}
}
测试没有多大意义,但我想知道为什么会失败。
答案 0 :(得分:1)
有很多关于交易范围和EF的帖子 实际上,在搜索中添加未提交的读取和非锁定。
Good basic explanation and example
从EF 6开始...... EF transaction scope docu
一般来说,你不需要它。 (也有例外) 和 我希望我不必支持使用未提交读取的系统。 ;-) 肮脏......
祝你好运答案 1 :(得分:1)
交易与数据库不同。看起来您正在检查打开连接的隔离级别,但不检查正在运行的事务。 一般来说 - 您可以使用不同的隔离级别在此连接上打开连接并运行多个事务。
using (var context = new MyEntities())
{
using (var tran = context.Database.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted))
{
Assert.AreEqual(System.Data.IsolationLevel.ReadUncommitted, tran.UnderlyingTransaction.IsolationLevel);