2013-05-18 161 views
0
public class Slider_Locale 
    { 
     [Key] 
     public int Slider_LocaleID { get; set; } 

     [ForeignKey("Culture")] 
     public int CultureID { get; set; } 
     public string Slogan { get; set; } 


     public virtual Culture Culture { get; set; } 
    } 

    public class Culture 
    { 
     [Key] 
     public int CultureID { get; set; } 
     public string CultureName { get; set; } 
     public string DisplayName { get; set; } 

     public virtual Slider_Locale slider_Locale { get; set; } 
    } 

它給錯誤如下:實體關係

System.Data.Edm.EdmAssociationEnd:模型生成過程中檢測到

一個或多個驗證錯誤:多重無效角色 'Slider_Locale_Culture_Source'的關係爲 'Slider_Locale_Culture'。因爲依賴角色屬性不是 的關鍵屬性,所以依賴角色的多重性的上限必須是* * *。

我怎麼能設計這種關係?請幫助我,因爲我是mvc和實體的新手。

回答

0

這是一個有點棘手的事情,首先圍繞你的大腦。問題在於你試圖建立一個1:1(或1:0)的映射,但是你的模型中沒有任何東西來執行這種映射。例如,如果有多個Slider_Locale對象具有相同的CultureID值,該怎麼辦?您的應用程序將如何知道選擇哪一個?

現在,您可能知道這絕不會發生,但實體框架不會發生,並且它必須謹慎,因此它不會讓您建立它不能建立的關係證明與表結構一致。理想情況下,它會讓你指定除主鍵以外的唯一約束來解決這個問題,也許有一天它會,但現在最簡單的方法是將它改爲一對多映射。例如,你可以這樣做:

public class Slider_Locale 
{ 
    [Key] 
    public int Slider_LocaleID { get; set; } 

    [ForeignKey("Culture")] 
    public int CultureID { get; set; } 
    public string Slogan { get; set; } 

    public virtual Culture Culture { get; set; } 
} 

public class Culture 
{ 
    [Key] 
    public int CultureID { get; set; } 
    public string CultureName { get; set; } 
    public string DisplayName { get; set; } 

    // Note that this got changed to ICollection<> 
    public virtual ICollection<Slider_Locale> slider_Locales { get; set; } 
} 

你可以做的另一件事是改變類,以便它們共享相同的主鍵值,但爲了做到這一點,你將不得不作出的至少一個關係可選。如果你讓我知道Slider_Locale.Culture是否爲空,或者是Culture.slider_Locale,或者兩者都可以,我可以舉一個例子。