1

我是 EntityFramework 新手。我面临一个非常奇怪的问题。我无法使用 linq 到实体查询来使用事务。我使用过 DbTransaction 和 TransactionScope。一旦查询被命中,错误就会发生。我正在使用 EF 4.3。上下文照常从 DbContext 派生。我正在使用代码优先方法。

        using (TransactionScope s = new TransactionScope())
        {
         using(var context = new XYZContext())
         {   
               context.Database.Connection.Open();
               Int32 count = (from xyz in context.XYZs
                           where xyz.Name == "SameName"
                           select xyz.Name).Count();
               Assert.AreEqual(count, 1);
          }
        }

我有些疑惑。我不想使用 TrasactionScope,因为我听说它有性能问题。那么我怎样才能使用 DbTransaction 代替(也为我抛出错误)?为什么我需要显式打开连接?当我“更新”一个上下文时,它不应该为我自动打开连接吗?

4

1 回答 1

1

尝试翻转您的 using 子句,并在开始事务之前打开连接,并使用上下文打开事务。如果您的代码正在更新,您还需要提交事务。

using(var context = new XYZContext())
  {   
      context.Database.Connection.Open();
      using (TransactionScope s = context.Connection.BeginTransaction())
      {

          Int32 count = (from xyz in context.XYZs
                           where xyz.Name == "SameName"
                           select xyz.Name).Count();
          Assert.AreEqual(count, 1);
          s.Commit()
        }
   }
于 2012-10-11T09:33:13.533 回答