我有一个使用Entity Framework的Web应用程序 - 我们利用TransactionScope类提供环境事务。
有没有办法告诉EF优先使用标准T-SQL事务而不是DTC事务?经常情况下,我们在一个EntityContext和一个TransactionScope实例中对不同表进行多次查询,但这似乎总是将事务升级为DTC。
我已经编写了一个简短的示例,如下所示。对单个表的查询正确地启动了T-SQL事务,并且位于连接SPID 54上。然后进行对ContactUs表的查询,EF会在另一个连接(SPID 53)上执行此操作,这会导致事务升级为DTC事务。
using (MyEntities DB = new MyEntities())
{
using (TransactionScope t = new TransactionScope())
{
DB.Individual.First().EmailAddress = "bob" + DateTime.Now.Second.ToString() + "@bob.com"; // done on connection 54
DB.ContactUs.First(); // done on connection 53 thus promoting the transaction!!
DB.SaveChanges();
t.Complete();
}
}