如果實體實例作爲子實體屬性查詢的結果加載,是否有方法可以優雅地加載EF實體的所有子實體?下面是一個簡單的例子就是我要問:實體框架:根據子實體屬性重新加載查詢中的所有子實體
首先,一些簡單的數據表:
CREATE TABLE Invoices
(
InvoiceID int IDENTITY(1000,1) NOT NULL,
Customer nvarchar(50) NOT NULL,
InvoiceDate datetime NOT NULL,
CONSTRAINT PK_Invoices PRIMARY KEY (InvoiceID)
)
CREATE TABLE InvoiceItems
(
InvoiceItemID int IDENTITY(1,10) NOT NULL,
InvoiceFK int NOT NULL,
PurchasedItem varchar(24) NULL,
Quantity decimal(10,2) NULL,
ItemPrice money NULL,
CONSTRAINT PK_InvoiceItems PRIMARY KEY (InvoiceItemID),
CONSTRAINT FK_InvoiceItems_Invoice FOREIGN KEY (InvoiceFK)
REFERENCES Invoices (InvoiceID)
)
現在,我們要的是基於一個匹配的發票項目來查詢發票表,但然後顯示每個選定發票的所有項目,無論它的條件匹配:
var qryOrders = from ordr in ctx.InvoiceItems
.Include("Invoice")
where ordr.PurchasedItem == "Buggy Whips"
select ordr;
foreach (var ordrItm in qryOrders)
{
Console.WriteLine("Order " + ordrItm.Invoice.InvoiceID + " contains buggy whips");
Console.WriteLine("Full contents of order:");
foreach (var itm in ordrItm.Invoice.InvoiceItems)
{
//this will only show the buggy whip item
Console.WriteLine(itm.PurchasedItem);
}
}
我想要的是,以顯示包含「趕馬車的鞭子」,包括不是趕馬車的鞭子項目每個訂單的所有訂單項。如果我在SQL中編寫這個,我會在子查詢中使用WHERE InvoiceID IN()
子句。我的問題是:實體框架能否以優雅的方式實現這一點?我想出了一些可行的黑客,但沒有什麼感覺是正確的。
您正確地解釋了我令人困惑的問題,謝謝! – 2010-12-21 02:19:29
@保羅·凱斯特 - 真的嗎?哇 - 幸運的猜測。 :) – RPM1984 2010-12-21 02:29:48