私は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」でなければなりません。
これは、私は外部キーの定義で何かに失敗していることを意味しますが、どこを見るべきか本当にわかりません。どんなヘルプ/ヒントも大歓迎です。
クラス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
を使用する必要があります。