web-dev-qa-db-ja.com

Entity Frameworkでの外部キー関係の作成に関する問題

私はEntity Frameworkの流AなApiで外部キー関係を設定するのに問題があります:

レポートのヘッドは次のとおりです。

 public class Testata
{
    public Testata() { Details = new List<Dettaglio>(); }
    public virtual int IDTEST { get; set; }
    public virtual string Value { get; set; }
    public virtual int IDDETAIL { get; set; }
    public virtual string IDTESTALT { get; set; }
    public virtual byte[] BLOB { get; set; }

    public virtual IList<Dettaglio> Details { get; set; }
}

これはレポートの詳細です

public class Dettaglio
{
    public virtual int IDDETAIL { get; set; }
    public virtual int IDTEST { get; set; }
    public virtual string DSDETAIL { get; set; }

    public virtual Testata TEST_TABLE { get; set; }
}

そして、これは私の両方の流fluentなAPI定義です。レポートの責任者:

public TEST_TABLEMap()
    {
        // Primary Key
        this.HasKey(t => t.IDTEST)
            .Property(t => t.IDTEST)
            .IsRequired()
            .HasColumnType("Int")
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
            .HasColumnName("IDTEST");


        // Table & Column Mappings
        this.ToTable("TEST_TABLE");
        this.Property(t => t.Value).HasColumnName("DSVALUETEST");
        this.Property(t => t.IDTESTALT).HasColumnName("IDTESTALT");
        this.Property(t => t.BLOB).HasColumnName("BLOB");
    }

レポートの詳細:

public TEST_DETAILMap()
    {
        // Primary Key
        this.HasKey(t => t.DSDETAIL);

        // Properties
        this.Property(t => t.DSDETAIL);

        // Table & Column Mappings
        this.ToTable("TEST_DETAIL");
        this.Property(t => t.IDDETAIL).HasColumnName("IDDETAIL");
        // this.Property(t => t.IDTEST).HasColumnName("IDTEST");
        this.Property(t => t.DSDETAIL).HasColumnName("DSDETAIL");

        // Relationships
        this.HasOptional(t => t.TEST_TABLE)
            .WithMany(t => t.Details)
            .HasForeignKey(d => d.IDDETAIL).WillCascadeOnDelete(true);

    }

実行時に私は常にこのエラーを受け取ります

System.Data.Entity.Edm.EdmAssociationType::多重度は、関係 'Dettaglio_TEST_TABLE'のロール 'Dettaglio_TEST_TABLE_Target'の参照制約と競合します。依存ロールのすべてのプロパティはnull不可であるため、プリンシパルロールの多重度は「1」でなければなりません。

これは、私は外部キーの定義で何かに失敗していることを意味しますが、どこを見るべきか本当にわかりません。どんなヘルプ/ヒントも大歓迎です。

39
user2541621

クラスDettaglio...の外部キープロパティ間に競合があります。

public virtual int IDTEST { get; set; }

... null不可型(int)であるため、オプションにすることはできず、マッピングも...

this.HasOptional(t => t.TEST_TABLE) //...

...リレーションシップをオプションにする場合。

オプションの関係が本当に必要な場合は、null許容のFKプロパティを使用します。

public virtual int? IDTEST { get; set; }

それ以外の場合は、null不可のFKプロパティとの必要な関係にHasRequiredを使用する必要があります。

106
Slauma