7

我知道我可以通過將所有內容推入單個實體而不是嵌套複雜類型(因爲它們只是1-1映射)來解決此問題,但我喜歡它的組合方式生成的OM中的屬性。EF 4.2,CodeFirst - 在完成類型內的導航屬性

我有一個Customer實體,其中包含Complext類型「CrmData」。 CrmData實體具有複雜類型的地址。

public class Customer { 
    [Required] 
    public CrmSpecificData CrmData { get; set; } 
} 
[ComplexType] 
public class CrmSpecificData { 
    [MaxLength(40)] 
    public string FirstName { get; set; } 

    [MaxLength(80)] 
    public string LastName { get; set; } 

    public Address Address { get; set; } 
} 
[ComplexType] 
public class Address { 
    [MaxLength(150)] 
    public string Address1 { get; set; } 

    [MaxLength(150)] 
    public string Address2 { get; set; } 

    [MaxLength(100)] 
    public string City { get; set; } 

    [MaxLength(15)] 
    public string PostalCode { get; set; } 

    public StateProvince StateOrProvince { get; set; } 

    public virtual CountryRegion CountryOrRegion { get; set; } 
} 

的StateProvince & COUNTRYREGION類型在我的數據庫實體(類似於AdventureWorks示例數據庫是如何工作的)。問題是,當EF嘗試創建模型時,它失敗:

'MyCo.Crm.Entities.StateProvince'類型已被配置爲實體類型。它不能被重新配置爲一個複雜的類型..

我試過讓StateProvince一個複雜的類型,但是不能解決問題。想法?

public class StateProvince { 
    [Key] 
    public int StateProvinceId { get; set; } 

    [MaxLength(3)] 
    public string StateProvinceCode { get; set; } 

    [MaxLength(50)] 
    public string Name { get; set; } 
} 

回答

14

複雜類型cannot contain navigation properties。導航屬性只能在實體中定義。所以,你必須:

  • 使用table splitting,而不是複雜的類型,但它會導致另一個問題 - 例如,你將無法嵌套的類型,你將不得不使用急切/延遲加載加載它們。我張貼了這一切的導航性能的主要實體
+0

沒有failright後

  • 移動,我終於發現,提到你的答案另一個線程......這種情況下,我想我會讓我的國家和國家性質的字符串和將代碼存儲爲我寧願處理查找,因爲我喜歡我擁有的模型。驗證片只有不足之處,但我可以用其他方式處理。 – 2011-12-23 12:46:25