EF的DbContext是否应包含所有表格?

Fab*_*bio 6 entity-framework dbcontext

我是EF4的新手,我正在试图找出创建我的DbContext类的最佳方法.

将所有表/实体放入一个且只有一个DbContext类中是否存在任何问题(特别是性能),如下面的代码?

public class AllInOneDb : DbContext
{
    public DbSet<Customer> Customers{ get; set; }
    public DbSet<Address> Addresses{ get; set; }
    public DbSet<Order> Order{ get; set; }
    public DbSet<Product> Products{ get; set; }
    public DbSet<Category> Categories{ get; set; }
    // and more and more entities...
}
Run Code Online (Sandbox Code Playgroud)

或者我应该根据功能的子集对我的类进行建模?

public class CustomerDb : DbContext
{
    public DbSet<Customer> Customers{ get; set; }
    public DbSet<Address> Addresses{ get; set; }
    public DbSet<Order> Order{ get; set; }
}

public class ProductDb : DbContext
{
    public DbSet<Product> Products{ get; set; }
    public DbSet<Category> Categories{ get; set; }
    public DbSet<Order> Order{ get; set; } // look Order entity again!
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Min*_*Min 7

如果您有具有特定业务逻辑的子区域,则可以将其拆分为多个DbContext.(这些较小的上下文遵循对域驱动设计至关重要的模式,称为有界上下文).创建针对这些不同进程而非一个通用上下文的DbContexts有许多好处.随着应用程序的增长,维护每个上下文以及在其中找到所需的逻辑将变得更加容易.(优于在单个中添加或修改现有逻辑,DbContext具有许多DbSet属性和许多类的流畅配置)

表现是另一个考虑因素 当Entity Framework创建上下文的内存模型时,上下文越大,生成和维护内存模型所花费的资源就越多.

如果要Order在多个上下文之间共享实例(),则实体一次只能附加到一个上下文.首先从Customer DbContext分离Order并将Order附加到Product DbContext.您应该小心(或者只是避免)将已添加,已修改或已删除的实体从一个上下文移动到另一个上下文.

Order order;
using (var custDb = new CustomerDb()){
   order = custDb.FirstOrDefault(o=>OrderId == "orderid");
}
using (var prodDB = new ProductDb()){
   prodDB.Attach(order);
   ...
}
Run Code Online (Sandbox Code Playgroud)