我在分层应用程序中使用带有自跟踪实体的EF 4.1,它使用WCF将实体从客户端来回传送到服务器。
我的数据库的一部分包含3个表:
Customer
Contact
CustomerContacts
CustomerContacts
仅包含Customer
和Contact
的两个主键,因此EDM将其表示为导航属性 - Customer.Contacts
和Contacts.Customers
。 CustomerContacts
表在模型中没有表示,这意味着没有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
的冗余临时副本?
答案 0 :(得分:1)
您已经知道所选客户的Id
,因此您只需将其作为参数传递给WCF并查询与客户相关的联系人:
var customerContacts = context.Contacts
.Where(c => c.Customers.Any(cu => cu.Id == passedId));
无论如何,您应该考虑使用更适合此场景的WCF数据服务替换您的WCF,并支持开箱即用的许多功能(包括加载导航属性)。