这个问题在简单的例子中无法重现,但我想知道是否有人有经验和技巧,以下是问题:
- 使用 Entity Framework
- 在应用程序中有许多点将数据写入到某些实体表中,例如Customer,以及将数据写入到历史表中
- 这两个操作都使用Entity Framework,但它们使用不同的上下文
- 这些操作需要在一个事务中:即如果其中一个写入失败,则不能写入另一个等等。
- 我可以使用TransactionScope来封装它们,
像这样:
using (TransactionScope txScope = new TransactionScope()) {
...
}
但是我收到了以下错误信息:
Microsoft Distributed Transaction Coordinator (MSDTC) 对于网络事务已被禁用。
我们的数据库管理员告诉我,MSDTC 是出于选择而被禁用的,无法安装。
因此,我正在尝试进行更改,尝试创建具有 MetadataWorkspace 的自己的 EntityConnection,并想法让每个上下文使用相同的 EntityConnection。 然而,这几乎是不可能的,例如,当前即使理论上两个上下文都在使用 EntityConnection,我仍然继续收到上面的错误。 很难理解为什么 Entity Framework 需要 MSDTC。
有人走过这条路吗? 有经验或代码示例可以分享吗?