我的域实体正在使用EF Table Per Type Inheritance,这是关系。
正如您所见,发票位于父实体Order.cs
上。现在,当我处理发票时,这会给我带来麻烦。
例如,创建发票,我需要将订单ID 传递给发票控制器:
public ActionResult Create(int orderId)
{
if (orderId == 0) return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
// determine whether the order is a SaleOrder or a PurchaseOrder
// then create the viewModel passing in the SaleOrder / PurchaseOrder details
return View(viewModel);
}
如何通过简单的ID来确定订单的子类型?
更新
public DbSet<PurchaseOrder> PurchaseOrders { get; set; }
public DbSet<SaleOrder> SaleOrders { get; set; }
我已经围绕每个建立了一个存储库,所以我有一个PurchaseOrderRepository
和一个SaleOrderRepository
,我这样做我的CRUD。
答案 0 :(得分:1)
如果这两个类继承自同一个类,则可以创建另一个DbSet
public DbSet<Order> Orders { get; set; }
并在你的行动中要求这样的订单
public ActionResult Create(int orderId)
{
if (orderId == 0) return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
var order = db.Orders.Find(orderId);
if(order is SaleOrder){
//do your stuff for SaleOrder
}
if(order is PurchaseOrder){
//do your stuff for PurchaseOrder
}
return View(viewModel);
}