我有一个使用实体框架的 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();
}
}