gpt4 book ai didi

entity-framework - EF 的 DbContext 是否应该包含所有表?

转载 作者:行者123 更新时间:2023-12-04 14:49:07 24 4
gpt4 key购买 nike

我是 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...
}

或者我应该根据功能子集为我的类建模?
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!
}

谢谢

最佳答案

如果您有具有特定业务逻辑的子区域,您可以将其拆分为多个 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);
...
}

关于entity-framework - EF 的 DbContext 是否应该包含所有表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10150383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com