获取EF TPT继承中的实体类型

时间:2017-02-03 14:17:55

标签: c# entity-framework asp.net-mvc-5

我的域实体正在使用EF Table Per Type Inheritance,这是关系。

table per type

正如您所见,发票位于父实体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来确定订单的子类型?

更新

Theo问我当前是如何检索SaleOrders和PurchaseOrders的。我在我的背景下有这个:

public DbSet<PurchaseOrder> PurchaseOrders { get; set; }
public DbSet<SaleOrder> SaleOrders { get; set; }

我已经围绕每个建立了一个存储库,所以我有一个PurchaseOrderRepository和一个SaleOrderRepository,我这样做我的CRUD。

1 个答案:

答案 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);
    }