我在服务器上运行了多个网站。这些站点访问本地数据库,并在数据库中调用链接服务器上的存储过程。
除了正在运行Entity Framework 6.1.1的网站外,所有网站都运行良好。
调用完成后,我们收到错误:The operation could not be performed because OLE DB provider "SQLNCLI10" for linked server "___" was unable to begin a distributed transaction.
此时运行的代码是使用.tt文件自动生成的......
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("procname", param1, param2, param3, param4);
如上所述,这适用于旧版本的EF。 (这不是MSDTC配置的问题。)
在此页面(Working with Transactions (EF6 Onwards))上,它说:
从EF6 Database.ExecuteSqlCommand()开始,默认情况下会将命令包装在事务中(如果尚未存在)。此方法存在重载,允许您根据需要覆盖此行为。同样在EF6中,通过诸如 ObjectContext.ExecuteFunction()之类的API执行模型中包含的存储过程也是一样的(除了默认行为暂时不能被覆盖)
我被困了吗?我是否需要恢复到Entity Framework 5?