gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:32:54 26 4
gpt4 key购买 nike

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

table per type

如您所见,发票位于父实体 Order.cs 上。这让我现在在处理发票时遇到问题。

例如,要创建发票,我需要将订单 ID 传递给发票 Controller :

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。

最佳答案

如果这两个类继承自同一个类,您可以创建另一个 DbSet

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

并在您的 Action 中请求这样的订单

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

关于c# - 获取 EF TPT 继承中的实体类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42026325/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com