問題

2013-07-02 22 views
30

Entity Frameworkの上の外部キーの関係を作成し、私は私のEntity Frameworkの流暢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; } 
} 

これは私の流暢な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'のRole 'Dettaglio_TEST_TABLE_Target'に参照制約があります。依存ロールのすべてのプロパティはnull不可能なので、プリンシパルロールの多重度は「1」でなければなりません。

私が推測するように、私は外来キーの定義で何か失敗しているのですが、私は実際にどこを見るかわかりません。 ヘルプ/ヒントは大変ありがとうございます。オプションで、あなたのマッピングすることはできませんので、非NULL可能タイプ(int)を有し、

public virtual int IDTEST { get; set; } 

クラスDettaglioであなたの外部キーのプロパティの間に矛盾がある

答えて

89

... ... ...

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

...ここでは、関係をオプションにします。

あなたは確かにオプションの関係がNULL可能FKプロパティを使用する場合:

public virtual int? IDTEST { get; set; } 

そうでなければ、あなたがnull非許容FKプロパティで、必要な関係のためにHasRequiredを使用する必要があります。

+1

ありがとうございました:)解決済み – user2541621

+1

これは良い答えです – abelabbesnabi

+2

「?私の場合はキーの追加でした。 – jonas