EF 6多个上下文到同一个数据库(表/权限分离)

时间:2015-02-19 18:58:15

标签: c# entity-framework database-design entity-framework-6 unit-of-work

对于我的项目,我需要将数据库分解为多个上下文以进行调制分离,例如:

  • DataContext1:Car,Person,Color。(Geral Module)
  • DataContext2:BankAccount,Money,Income。(财务模块)

在代码上,我需要有一个工作单元,将两者结合起来用于相同的交易代码。

public class MyClass(IUserRepository userRepository, IBankRepository bankRepository, IUnityOfWork uow)
{
  // uow start transaction
  // IUserRepository is inside ContextA
  // IBankRepository is inside ContextB
  // uow end transaction(Commit)
}

参考EF 6. +

  • 这种分离还行吗?,DataContext支持吗?
  • 管理它们的未来可能是一个巨大的问题?

1 个答案:

答案 0 :(得分:1)

您将遇到的第一个问题是,在没有大量复杂的情况下,上下文中的任何类型/表都不能重复。例如,如果UserContext中的表与BankAccount上下文中的表相关,那么您不能在模型中具有该关系,因为那样您将在两个位置定义相同的表 - 因此类型 - 。我从来没有这样做过,但我看不到它在任何好的地方都会结束。

如果你真的真的需要将你的上下文分成两个或更多,一种方法可能是让一个模型包含所有内容,另外一个类将包装每个子系统的上下文,它只公开该子系统所需的类型。这是适配器或介体模式。