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

本文关键字:事务 一个 上下文 两个 是否 | 更新日期: 2023-09-27 18:08:36

我有一个dll,它有一个实体模型,做一个特定的工作。我的主要应用程序使用dll,但也有自己的实体模型来与DB通信。

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

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

可以,使用TransactionScope

但是,您应该注意,事务将由MSDTC处理,而不是单独在数据库级别处理。

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

这两个上下文是不同的。我有一个实体模型叫Location。DLL中的Edmx,它知道如何存储位置。在主应用程序中,我有一个称为Artifacts的实体模型。知道如何存储工件的Edmx。

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

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

应该是

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

注意这两个方法在不同的dll中。

我如何在我的例子中使用transactionScope ?