對於EF Code First我相當陌生,這可能(希望!)是一個簡單的問題。用EF代碼優先映射單向關係
我有人民和地址之間的簡單關係:
People
------
PersonID
Name
Address
-------
AddressID
Address1
PersonID
大多數時候,我在我的人民表有AddressID;但這個數據庫有點「倒退」,因爲它引用了PersonID。在我的代碼中,我處理Person對象並希望獲取其關聯的地址。這種關係可能是1人擁有多個地址,但它總是1:1。 (這是第三方數據庫 - 我無法控制架構。)
如何在Code First中建立關係以關聯人員和地址?我使用的是流暢的API,但是我沒有看到在兩個實體中都沒有密鑰的情況下設置它的方法。理想情況下,我想我的實體將設立這樣的:
Person {
public int PersonID {get;set;}
public string Name {get;set;}
//other person properites
//navigation property
public Address Address {get;set;}
}
Address {
public string Address1 {get;set;}
//other properties for address
//navigation property
public Person Person {get;set;}
}
我已經嘗試了一些方法來配置的關係,但它一直示數出來。我試過將Address類定義爲複雜類型,但由於它是一個單獨的表,可以工作嗎?另外,我嘗試過使用HasOptional和WithOptionalDependant,但無濟於事。
因此,有關如何最好地配置我的EF CF邏輯以使Address成爲Person中的實體的任何想法。
任何建議或幫助,非常感謝。
UPDATE 我在下面嘗試了Mark的建議,但我得到了一個不同的錯誤。 (見我的評論)
我的地址設置實體集PERSONID作爲實體鍵:
modelBuilder.Entity<Address>()
.HasKey(a => a.PersonID);
modelBuilder.Entity<Address>()
.Property(a => a.PersonID)
.HasColumnName(<my real column name>);
所以實體在DB關鍵是PersonID,但它也是一個FK回人。這是造成這個問題嗎? (再次,不是我的DB - 這是第三方。)任何幫助,非常感謝。謝謝!!
感謝您的回答。我沒有嘗試1:多的設置。當我進行了您所建議的更改後,我得到了一個不同的錯誤 - 'Person_Addresses'關係中'多重性在角色'Person_Addresses_Target'中無效。因爲依賴角色反映了關鍵屬性,所以依賴角色的多重性的上界必須是'1'。在我的設置中,地址表的PK是PersonID,並且我有這個設置作爲我的實體鍵模型構建器設置。 – 2012-08-03 09:54:59
我看到了 - 我誤解了你的設置,我認爲AddressId是桌子上的PK。也許[Table per Concrete Type](http://blogs.microsoft.co.il/blogs/gilf/archive/2010/01/25/table-per-concrete-type-inheritance-in-entity-framework.aspx)會幫助更多? – 2012-08-03 12:11:17