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