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

C# 获取EF TPT继承中的实体类型,c#,entity-framework,asp.net-mvc-5,C#,Entity Framework,Asp.net Mvc 5,我的域实体使用EF Table Per类型继承,下面是关系 如您所见,发票位于父实体Order.cs上。当我处理发票时,这会给我带来问题 例如,要创建发票,我需要将订单Id传递给发票控制器: public ActionResult Create(int orderId) { if (orderId == 0) return new HttpStatusCodeResult(HttpStatusCode.BadRequest); // determine whether the ord

我的域实体使用EF Table Per类型继承,下面是关系

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

更新

西奥问我目前如何检索SaleOrders和PurchaseOrders。在我的背景下,我有以下几点:

public DbSet<PurchaseOrder> PurchaseOrders { get; set; }
public DbSet<SaleOrder> SaleOrders { get; set; }
公共数据库集采购订单{get;set;} 公共数据库集{get;set;}
我已经围绕每个类建立了一个存储库,因此我有一个
PurchaseOrderRepository
和一个
SaleOrderRepository
,我用这种方式执行CRUD。

如果这两个类继承自同一个类,您可以创建另一个数据库集

public DbSet<Order> Orders { get; set; }

这取决于许多事情。您将销售订单和采购订单存储在同一张表中还是不同的表中?你实际上是如何取回它们的?分配给订单类型的ID范围之间是否有任何区别?你反对建立某种控制机制来跟踪哪个ID分配给哪个订单类型吗?@Theo,他已经说过这是TPT策略,每个都有自己的表,这就是TPT的“意思”。但我已经添加了一些其他信息,可能有用啊。。。重读一遍,我现在明白了。不知道我是怎么漏掉的。如果你需要知道一个键背后的类型,那么你的设计中的某些东西就违背了类继承的目的。理想情况下,您应该创建一个(通用的?)存储库,将类型约束为订单类层次结构,并且它应该独立于具体类型执行其工作。嗯,这让我想到了统一我的
SaleOrderRepository
PurchaseOrderRepository
!那也可以吗?或者,如果我想带回所有的采购订单,我是否需要这些单独的订单
    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);
    }