EF如何关联已经加载的实体?

时间:2012-04-01 20:37:40

标签: entity-framework-4 wcf-ria-services

我在服务器上有以下方法(RIA服务):

public IQueryable<Customer> GetCustomers()
{
    return ObjectContext.Customers;
}

public IQueryable<Customer> GetCustomersWithInvoicesAndInvoiceItemsAsync()
{
    return ObjectContext.Customers
        .Include("Invoices.InvoiceItems");
}

这些项目作为IEnumerable&lt;&gt;加载在客户端上,让我们为CollectionA和CollectionB命名。我的问题是下一步:如果我在CollectionA中添加/删除客户,CollectionB将不会意识到它。编辑按预期工作,因为两个集合都包含相同的实体。有没有办法可以单独加载发票,并在客户端关联它们,所以我只会在一个客户集合上工作,而不是两个?

1 个答案:

答案 0 :(得分:0)

服务方(GetCustomers方法旁边):

public IQueryable<Invoice> GetInvoicesAndInvoiceItemsAsync()
{
    return ObjectContext.Invoices.Include("InvoiceItems");
}

客户端,在单独的电话中获取客户和发票后(IEnumerable s):

var query = customers.Join(invoices, c => c.CustomerId, i => i.CustomerId,
    (c,i) => Tuple.Create(c, i) );

这将为您提供客户 - 发票对的列表。或者使用GroupJoin:

var query = customers.GroupJoin(invoices, c => c.CustomerId, i => i.CustomerId,
    (c,i) => Tuple.Create(c, i) );

这将为您提供客户 - 发票(复数)对的列表。