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)
谢谢
如果您有具有特定业务逻辑的子区域,则可以将其拆分为多个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)
| 归档时间: |
|
| 查看次数: |
4803 次 |
| 最近记录: |