0

我在现有的大型数据库上使用 DB First 方法中的 EF Core。我想要实现的是以允许自定义数据库(即,向表中添加列)的方式定义我的实体,而无需复制我的所有实体定义,也无需使用 EF Core 继承方法。

让我展示一个简化的示例,只有两个表:Orders(id int, customer varchar)OrdersDetail(orderid int, detailid int, sku varchar),其中 orderid 是 Order(id) 的外键。

相应的实体会是这样的(映射代码被省略了,它应该很简单):

public class Order {
  public Order() {
    details = new List<OrderDetail>();
  }
  public int id {get; set;}
  public string customer {get; set;}
  public ICollection<OrderDetail> details {get; set;}
}

public class OrderDetail {
  public int orderid {get; set;}
  public int detailid {get; set;}
  public string sku {get; set;}
}

在我的代码(通常是 ASP.NET Core 中的控制器)中,我可能只想订购并返回其详细信息。

return _context.Orders.Include(o => o.details).Where(o => o.id);

到这里为止,一切正常。我需要实现的是将此实现保留在基础库中,并能够使用此库部署不同的应用程序,但实际上使用我的实体的子类,引用相同的表,但具有更多列,例如:

public class OrderCustom : Order {
  public DateTime orderDate {get;set;}
}

public class OrderDetailCustom : OrderDetail {
  public decimal amount {get; set;}
}

我想了解如何在不重新实现我的查询代码的情况下实现这一点。查询是在公共属性上定义的。

我尝试了 TPH 继承方法,但它一直在寻找 Discriminator 列,这在我的情况下没有意义,因为 DB 中没有实际的继承层次结构(基类用作模板)。

是否有任何配置模式可用于支持此要求?

4

0 回答 0