我正在使用純Fluent API Code-First。我沒有在我的實體上使用屬性,並且我保持獨立的上下文。我有一個OrderEntity
它與OrderDetails
有一對多的關係,加入OrderID
。因此,我有一個EntityTypeConfiguration<OrderDetailEntity>
它有以下幾種:Linq To實體間接上下文表格在Fluent API中加入
HasRequired(x => x.Order).WithMany(x => x.Details);
HasRequired(x => x.Item);
一個項目與它的價格有關係。但是這種關係是笛卡爾式的。一個項目有200 + ItemPrices
與它關聯。 ItemPrice
看起來是這樣的:
public string CurrencyCode { get; set; }
public int PriceTypeID { get; set; }
public decimal Price { get; set; }
有3 PriceTypes
,和幾十個貨幣的。
我認爲它適合ItemPrice
定義,像這樣項目和ItemPrice
之間的關係:
HasRequired(x => x.Item).WithMany(x => x.ItemPrices);
的項目不有一個貨幣代碼或Price
類型。一個項目只是一個項目,貨幣代碼和價格類型是在Order
被放置時確定的。這兩個變量在訂單上。因此,確定訂單的價格,我有這樣的:
SQL:
SELECT *
FROM Orders o
INNER JOIN OrderDetails od ON o.OrderID = od.OrderID
INNER JOIN Items item ON od.ItemID = item.ItemID
INNER JOIN ItemPrices itemPrice ON item.ItemID = itemPrice.ItemID AND o.CurrencyCode = itemPrice.CurrencyCode AND o.PriceTypeID = itemPrice.PriceTypeID
和LINQ:
context.Orders
.Join(context.OrderDetails,
o => o.OrderID,
od => od.OrderID,
(o, od) => new { o, od })
.Join(context.Items,
o2od => o2od.od.ItemID,
item => item.ItemID,
(o2od, item) => new { o2od, item })
.Join(context.ItemPrices,
o2od2item => new { o2od2item.item.ItemID, o2od2item.o2od.o.CurrencyCode, o2od2item.o2od.o.PriceType },
itemPrice => new { itemPrice.ItemID, itemPrice.CurrencyCode, itemPrice.PriceType },
(o2od2item, itemPrice) => new { o2od2item, itemPrice })
長的故事,總之:有之間的間接關係Order
和ItemPrice
,在關於計算Order
的價格的上下文中。
我所有的其他LINQ是美麗的,並正確使用導航屬性等。有沒有辦法在Fluent API中定義這種上下文關係,並在我的LINQ具有Order - > Detail - > Item - > Price時使用它?或者每次都必須對關係進行手動定義?