【发布时间】:2016-03-03 00:40:59
【问题描述】:
我正在尝试首先使用多个上下文创建 EF 代码。 一种用于 StaffContext (HR) 的上下文,另一种是 ,ShippingContext。
拥有多个上下文的想法有什么优势吗?因为我觉得构建起来很复杂。
我们如何构造实体?在基本上下文中或在每个单独的上下文中定义所有内容?
在这些上下文中,我需要访问 Staff 实体,当我尝试“更新数据库”时,它会给我一个错误,因为 Staff 实体已经存在于其他上下文中。我在不同的上下文中拥有相同的实体是错误的设计吗?
这是我目前拥有的:
public class StaffContext : BaseContext<StaffContext>
{
public DbSet<StaffPosition> StaffPositions { get; set; }
public DbSet<Staff> Staffs { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
public class ShippingContext : BaseContext<ShippingContext>
{
public DbSet<Armada> Armadas { get; set; }
public DbSet<Product> Products { get; set; }
public DbSet<Shipment> Shipments { get; set; }
public DbSet<ShipmentDetail> ShipmentDetails { get; set; }
public DbSet<ShipmentHandler> ShipmentHandlers { get; set; }
public DbSet<ShipmentOrder> ShipmentOrders { get; set; }
public DbSet<ShipmentOrderDetail> ShipmentOrderDetails { get; set; }
public DbSet<Staff> Staffs { get; set; }
public DbSet<Pangkalan> Pangkalans { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
非常感谢。
【问题讨论】:
-
您可能需要注意这个问题可能导致的对比鲜明的答案。您可能会从戴“EF”帽子或“DDD”帽子的人那里得到答案。一种是以数据为中心,另一种是以领域为中心。两个阵营对于“上下文”和“实体”这两个词的含义会有不同的理解。
-
嗨,Adrian Thompson Phillips,是的,老实说,我刚开始自己并遇到了这个 DDD 术语,然后我决定深入研究它。谢谢
-
如果你真的关心DDD和Bounded Context,那你就得把存储分开了。限界上下文不应该有任何向外查询的能力。
-
嗨,Alexey,感谢您的回复。请问您所说的“必须使用单独的存储”是什么意思?对于有界上下文不应该在外面查询,这意味着上下文之间的交叉查询不应该发生对吗?谢谢
标签: entity-framework ef-code-first domain-driven-design bounded-contexts