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; }
    }

次のようにエラーが発生します。

モデルの生成中に 1 つ以上の検証エラーが検出されました:

System.Data.Edm.EdmAssociationEnd:: 関係 'Slider_Locale_Culture' のロール 'Slider_Locale_Culture_Source' では多重度が無効です。従属ロール プロパティはキー プロパティではないため、従属ロールの多重度の上限は「*」である必要があります。

どうすれば関係を設計できますか? 私はmvcとエンティティの初心者なので、助けてください。

4

1 に答える 1

0

これは、最初は頭を悩ませているものの 1 つです。問題は、1:1 (または 1:0) マッピングを設定しようとしているのに、モデルにその種のマッピングを強制するものが何もないことです。たとえばSlider_Locale、同じCultureID値を持つオブジェクトが複数ある場合はどうなるでしょうか。アプリケーションは、どれを選択するかをどのように判断しますか?

さて、これが決して起こらないことを知っているかもしれませんが、Entity Framework はそうではありません。注意を怠る必要があるため、整合性を証明できない関係を設定することはできません。テーブル構造。理想的には、これを回避するために主キー以外の一意の制約を指定できるようにすることであり、いつかそうなるかもしれませんが、今のところこれを回避する最も簡単な方法は、1 対多のマッピングに変更することです。たとえば、次のことができます。

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; }
}

他にできることは、同じ主キー値を共有するようにクラスを変更することですが、そのためには少なくとも 1 つのリレーションシップをオプションにする必要があります。Slider_Locale.Culturenull 、またはCulture.slider_Locale、またはその両方であるかどうかを教えていただければ、この例を示すことができます。

于 2013-05-18T08:09:28.520 に答える