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 :: Multiplicity在Role中无效 'Slider_Locale_Culture_Source'的关系 'Slider_Locale_Culture'。因为Dependent Role属性不是 关键属性,多重性的上界 依赖角色必须是 * 。
我怎样才能设计这种关系?请帮助我,因为我是mvc和实体的新手。
答案 0 :(得分: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
,或两者兼而有之,我可以举例说明。