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”中的角色“Slider_Locale_Culture_Source”中无效。因为从属角色属性不是关键属性,所以从属角色的多重性的上限必须是“*”。

我该如何设计这种关系?请帮助我,因为我是 mvc 和实体的新手。

4

1 回答 1

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如果您让我知道是否可以为 null、或或两者兼而有之,我可以举一个例子Culture.slider_Locale

于 2013-05-18T08:09:28.520 回答