如果实体实例作为子实体属性查询的结果加载,是否有方法可以优雅地加载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