好與結表的問題是,實體框架不有映射他們,如果他們只包含鄰接表的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「類。
那麼我目前有概念模型設置,以便採購訂單作爲關聯實體(多對多)與聯繫人。在存儲模型中,我描述了Contact_PO。這是否如此,如果是這樣,我將如何獲得IsPrimary屬性,或者是否需要在概念模型中以某種方式描述Contact_PO表。有一次,我想創建一個Contact_PO和PurchaseOrders表的視圖並映射它,但還沒有做到這一點。這會是一個更好的行動?將嘗試在原始文章中張貼EDMX的圖像。 – CodeWarrior 2010-11-08 22:10:33
你是如何創建EDMX的?你是從DB生成的,還是手動添加實體?如果您想要IsPrimary字段,則必須映射聯結表。將IsPrimary字段移動到「聯繫人」表格怎麼樣?有一個字段(FK - 可爲空),稱爲「PrimaryPurchaseOrder」。這足夠嗎?如果您希望購買實體,您必須映射交匯表。 – RPM1984 2010-11-08 22:58:54
我創建Model-first的大多數EDMX然後從中生成數據庫並在稍後修改。對於PO和Contact_PO表,我創建了這些表,然後手動添加。我想在這種情況下,我會繼續並繪製交界表。我將不得不看看模型明智的形式。這可能是一種奇怪的看法,即將PO編號託管在實體中與主布爾值分離。我可能不得不採取一些方法來合併它們。自動取款機我不知道那將會發生什麼。 – CodeWarrior 2010-11-09 01:47:01