通过WCF以实体框架的多对多关系显式加载相关实体

时间:2012-07-06 21:53:24

标签: c# wcf entity-framework many-to-many self-tracking-entities

我在分层应用程序中使用带有自跟踪实体的EF 4.1,它使用WCF将实体从客户端来回传送到服务器。

我的数据库的一部分包含3个表:

Customer
Contact
CustomerContacts

CustomerContacts仅包含CustomerContact的两个主键,因此EDM将其表示为导航属性 - Customer.ContactsContacts.CustomersCustomerContacts表在模型中没有表示,这意味着没有CustomerContacts实体,我理解并期望EDM Designer在表示此表单的多对多关系时的功能。

情况是我有一个Customer的列表绑定到ComboBox,并希望仅在Contact加载Customer时它在ComboBox中选中。换句话说,我希望在Customer.Contacts中选择Customer时明确加载ComboBox。我无法在Customer.ID中使用Where来获取Contacts的列表,因为模型中没有与其相关的连接实体。

目前,我正在加载Customer的另一个副本,使用Include("Contacts")获取Contact,然后通过selectedCustomer.Contacts = temporaryCustomer.Contacts;进行设置

有没有人知道另一种方法,不需要我获取Customer的冗余临时副本?

1 个答案:

答案 0 :(得分:1)

您已经知道所选客户的Id,因此您只需将其作为参数传递给WCF并查询与客户相关的联系人:

var customerContacts = context.Contacts
                              .Where(c => c.Customers.Any(cu => cu.Id == passedId));

无论如何,您应该考虑使用更适合此场景的WCF数据服务替换您的WCF,并支持开箱即用的许多功能(包括加载导航属性)。