下午好,
我有三个表可以建立多对多的关系(Contacts,PurchaseOrder和PO_Contact)。 PurchaseOrder表最终将代表每个采购订单(每个采购订单只有一个)。每个客户可以与任意数量的PurchaseOrders相关联,并且每个采购订单可以与任意数量的联系人相关联。但是,对于每个联系人,可以有一个采购订单,该订单是该联系人的主要采购订单。
我正在试图弄清楚如何将其添加到我的EntityModel中,并且我即将推出。最终我想要一个PO对象的集合,其中一个被描述为Primary,但我不确定如何影响它。有人有这方面的经验吗?请在下面找到受影响表格的数据库图表。
科里
答案 0 :(得分:1)
连接表的问题是,如果Entity Framework 只包含相邻表的FK,那么不必须映射它们,但因为你有 IsPrimary 字段,它需要在模型上表示。
最终我希望拥有一个PO对象集合,其中一个被描述为主要
是的,正如我上面所说,你将不得不在物理上映射PO_Contact表,这意味着你的查询最终会像这样:
var contact = db.Contacts.SingleOrDefault(x => x.ContactId == 1);
var ordersForContact = contact.PO_Contacts.PurchaseOrders.ToList();
和此:
var order = db.PurchaseOrders.SingleOrDefault(x => x.POID == 1);
var contactsForOrder = order.PO_Contacts.Contacts.ToList();
但要找出“哪一个是主要的”? (并且可能有多个),你需要另一个过滤器。
这可能是一个示例查询:
var primaryOrdersForConactOne = db.Contacts
.Where(c => c.ContactID == 1)
.Where(c => c.PO_Contacts.IsPrimary)
.ToList();
这应该有效。
然而,如果您的肯定只有一个主要订单可以为任何给定的客户,您可以设置一种继承形式(TPH,TPT)并使该字段成为鉴别器,所以你最终使用单独的“PrimaryOrder”和“SecondaryOrder”实体,派生自基础“PurchaseOrder”类。