【发布时间】:2011-09-15 13:49:42
【问题描述】:
我有一个 dll,它有一个执行特定工作的实体模型。我的主应用程序使用该 dll,但也有自己的实体模型来与 DB 对话。
当我在主应用程序中保存触发 dll 实体的上下文保存的实体时,我可以将它们都包装在一个事务中吗?
【问题讨论】:
标签: c# entity-framework
我有一个 dll,它有一个执行特定工作的实体模型。我的主应用程序使用该 dll,但也有自己的实体模型来与 DB 对话。
当我在主应用程序中保存触发 dll 实体的上下文保存的实体时,我可以将它们都包装在一个事务中吗?
【问题讨论】:
标签: c# entity-framework
您可以使用TransactionScope。
不过,您应该知道,事务将由 MSDTC 处理,而不是单独在数据库级别处理。
更好的选择是使用工作单元和存储库模式来确保事件链中的每个操作(单个工作单元)使用相同的上下文。在这组操作结束时,您将调用 SaveChanges 一次,这将使用数据库事务。
【讨论】:
这两个上下文是不同的。我在一个知道如何存储位置的 dll 中有一个名为 Location.edmx 的实体模型。 在主应用程序中,我有一个名为 Artifacts.edmx 的实体模型,它知道如何存储工件。
工件有一个位置。在工件实体代码中我会写:
public void Save()
{
context1.saveChanges();
location.Save()
}
在 location.Save()
应该是
public void Save()
{
context2.saveChanges();
}
请注意,这两种方法位于不同的 dll 中。
在我的示例中如何使用 transactionScope?
【讨论】: