在同一范围内将ExecuteSqlCommand和LINQ混合到EF时,EF 6不使用事务范围

时间:2017-12-14 06:07:11

标签: c# entity-framework entity-framework-6 transactionscope

我将EF 6.1.NET 4.6.1一起使用。

如果我在dbContext上的using块中创建一个带有TransactionScopeAsync的事务范围,然后直接用dbContext.Database.ExecuteSqlCommand更新数据库中的数据,然后用{{1}从数据库中调用同一个实体在同一事务范围内查询,它不会显示更新的数据。

示例:

LINQ

如果我在using (MyDbContext dbContext = new MyDbContext()) { using (TransactionScope txScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { dbContext.Database.ExecuteSqlCommand("UPDATE TestTable SET TestText = 'A' WHERE ID = 1;"); var testObject_A = (from t in dbContext.TestTable where ID == 1 select t.TestText).FirstOrDefault(); // THIS WILL HAVE "A" dbContext.Database.ExecuteSqlCommand("UPDATE TestTable SET TestText = 'B' WHERE ID = 1;"); var testObject_B = (from t in dbContext.TestTable where ID == 1 select t.TestText).FirstOrDefault(); // THIS WILL HAVE "A" <-- It should have been a "B" txScope.Complete(); } } 上更新了第一次正确显示的内容 在我查询TestTable后,我会在textOject上看到更改 但是,如果我然后在TestTable上运行另一个更新,然后尝试在同一个数据库上下文中运行LINQ查询,我将看不到更改。

我错过了什么?

此外,我无法使用textOject,因为我在当前方法之外创建了父事务范围,我需要它们加入父事务。
BeginTransaction没有提供一种从外部呼叫者/父母加入交易的方法,而不会将现有的连接从父方式传递给子方法。或者我似乎无法找到有关如何在EF 6中执行此操作的任何文章。

https://msdn.microsoft.com/en-us/library/dn456843(v=vs.113).aspx

0 个答案:

没有答案