2016-11-17 27 views
0

我有一個像下面的例子玩具的情況:我可以在實體框架代碼優先的複雜類型中定義一對多關係嗎?

public class Person 
{ 
    public Guid Id { get; set; } 
    public string FullName { get; set; } 
    public ContactInfo ContactInfo { get; set; } 
} 

public class ContactInfo 
{ 
    public string EmailAddress { get; set; } 
    public IEnumerable<Address> PostalAddresses { get; set; } 
} 

public class Address 
{ 
    public Guid Id { get; set; } 
    public Guid PersonId { get; set; } 
    /* ... other properties ... */ 
} 

真實的情況要複雜得多,我會真的PostalAddresses財產相當於上ContactInfo而不是Person

這是可能的使用實體框架Code First?


編輯

基本上,我想上述被序列化到如下表結構:

  • 表:人民

    • 編號
    • 全名
    • ContactInfo_EmailAddress
  • 表:地址

    • 編號
    • PERSONID
    • ...

所以問題是,我需要有IEnumerable<Address>集合將在ContactInfo複雜類型上代替根類型,Person。當我保存一個Person對象時,沒有Address行被添加到數據庫中。

+1

這不太清楚你在問什麼。 – user2697817

回答

1

你的問題似乎很清楚。

我不是專家,但根據How to specify a relation on a complex type?你試圖做的是不可能的。 ComplexType不能具有導航屬性。

我想解決的辦法是將ContactInfo定義爲一個實體,而不是一個複雜的類型。所以ContactInfo將有一個PK和它自己的表。

也許別人知道更好的解決方案?

順便說一句,我試圖做類似的事情。我(簡體)域名:

應用

  • 編號:詮釋
  • 考生:考生
  • 簡歷:簡歷< ==我寧願沒有這個類單獨的表,但如何實現這一點?

恢復

  • 經歷:[經驗]
  • 培訓:[培訓]

經驗

  • 編號:INT
  • 說明:字符串

培訓

  • 編號:詮釋
  • 說明:字符串

候選

  • 編號:詮釋
  • 名稱:字符串

最後我給恢復的編號也一樣,但結果卻是由只有一個列的冗餘審查表,即簡歷ID(相當於應用ID)。

+0

謝謝。我也意識到這是不可能的。就我而言,我真的很在乎底層的SQL表結構,因此我最終創建了一個單獨的,平坦的數據訪問模型。我可以使用AutoMapper的一些魔術將我的域模型映射到它。 –

相關問題