我有几个产品,如HotelProduct,FlightProduct ......,它们派生自BaseProduct类。这些产品的表格将以TPC方式在数据库中生成。 OrderLine类有一个BaseProduct。
我的问题是,当我选择带有相关产品的OrderLine时,我不知道如何将BaseProduct转换为派生产品。例如,我有这个查询:
var order = (from odr in _context.Orders
join orderLine in _context.OrderLines on odr.Id equals orderLine.OrderId
join hotel in _context.Products.OfType<HotelProduct>() on orderLine.ProductId equals hotel.Id
where odr.UserId == userId && odr.Id == orderId
orderby odr.OrderDate descending
select odr).SingleOrDefault();
在OrderLine中,我有BaseProduct属性而不是HotelProduct的属性。有没有办法在OrderLine或任何其他解决方案中将BaseProduct转换为派生类?
答案 0 :(得分:0)
我认为您想要做的事情是TPC战略无法做到的。考虑ProductId
上的OrderLine
属性:它是HotelProduct表或FlightProduct表的FK吗?它只能是一个,因此Product
属性只能映射到HotelProduct
或FlightProduct
的关联。
您至少有两种选择:
ProductId
/ Product
属性替换为HotelProduct
/ HotelProductId
和 FlightProduct
/ FlightProductId
属性OrderLine,您可以导航到您想要的产品类型;或者,HotelProduct
和FlightProduct
表与第三个与OrderLine表有关系的Product表具有1-0,1的关系。