是否可以使用指向不同模式的两个不同上下文的单个事务(在EF上)?

时间:2016-10-14 13:34:55

标签: entity-framework

我当前正在设计一个应用程序,我需要使用两个不同的数据库模式(在同一个实例上):一个作为应用程序基础,另一个作为自定义应用程序和每个客户的字段。 因为我读了一些关于Repository模式的东西,并且我已经理解可以使用两个不同的上下文而没有效率松散,我现在问我是否可以在两个模式与Entity Framework之间使用单个数据库事务,因为我实际上在做直接在数据库上(SQL Server 2008-2012)。 对不起我的英语,提前致谢!

1 个答案:

答案 0 :(得分:0)

如果您的连接字符串是相同的(在您的情况下,因为您只有不同的上下文有不同的模式),那么您可以使用这种方法。

基本上,您将有两个不同的上下文,它们将通过相同的连接字符串连接到数据库,并且代表两个不同的模式。

using (var scope = new TransactionScope()) {
    using (var contextSO = new ContextSchemaOne()) {
        // Add, remove, change entities from context schema one
        ContextSchemaOne.SaveChanges;
    }
    using (var contextST = new ContextSchemaTwo()) {
        // Add, remove, change entities from context schema two
        ContextSchemaTwo.SaveChanges;
    }
    scope.Complete();
} 

过去使用这种方法我并不是很成功,我们每个数据库切换到一个上下文。

进一步阅读:Entity Framework: One Database, Multiple DbContexts. Is this a bad idea?

在做出决定之前,最好先阅读一些关于工作单元的内容。

您必须执行以下操作:Preparing for multiple EF contexts on a unit of work - TransactionScope