是否可以在两个不同的上下文中使用一个事务?

时间:2011-09-15 13:49:42

标签: c# entity-framework

我有一个具有执行特定工作的实体模型的dll。我的主应用程序使用该dll,但也有自己的实体模型与数据库通信。

当我在主应用程序中保存一个触发dll实体的上下文保存的实体时,我可以将它们包装在一个事务中吗?

2 个答案:

答案 0 :(得分:2)

您可以使用TransactionScope

但是,您应该知道,事务将由MSDTC处理,而不是仅在数据库级别处理。

更好的选择是使用工作单元和存储库模式来确保事件链中的每个操作(单个工作单元)使用相同的上下文。在操作集合结束时,您可以使用DB事务一次调用SaveChanges。

答案 1 :(得分:0)

这两种情况不同。我在dll中有一个名为Location.edmx的实体模型,它知道如何存储位置。 在主应用程序中,我有一个名为Artifacts.edmx的实体模型,它知道如何存储工件。

工件有一个位置。在工件实体代码中,我会写:

public void Save()
{
context1.saveChanges();
location.Save()
}

in location.Save()

它将是

public void Save()
{
context2.saveChanges();
}

请注意,这两种方法都在不同的dll中。

我的示例中如何使用transactionScope?