2013-07-02 4 views
30

Ich habe Probleme, eine Fremdschlüsselbeziehung in meinem Entity Framework fließend Api konfigurieren:Probleme eine Fremdschlüsselbeziehung auf Entity Framework zu schaffen

Hier ist der Kopf des Berichts:

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

Diese ist das Detail des Berichts

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

Und das ist meine fließende API-Definition von beiden. Leiter des Berichts:

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

Detail des Berichts:

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

    } 

Bei der Ausführung habe ich immer erhalte diese Störung

System.Data.Entity.Edm.EdmAssociationType: Multiplicity Konflikte mit der referenziellen Einschränkung in Role 'Dettaglio_TEST_TABLE_Target' in der Beziehung 'Dettaglio_TEST_TABLE'. Da für alle Eigenschaften in der abhängigen Rolle kein Nullwert zulässig ist, muss die Multiplizität der Hauptrolle "1" sein.

Was, ich denke, bedeutet, dass ich etwas bei der Fremdschlüsseldefinition versagt, aber ich weiß nicht wirklich, wo ich hinschauen soll. Jede Hilfe/Hinweis wird sehr geschätzt.

Antwort

89

Es gibt einen Konflikt zwischen der Fremdschlüsseleigenschaft in der Klasse Dettaglio ...

public virtual int IDTEST { get; set; } 

..., die einen Nicht-Nullable-Typen hat (int) und somit nicht fakultativ und die Zuordnung sein kann ...

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

... wo die Beziehung optional sein soll.

Wenn Sie in der Tat eine optionale Beziehung eine Nullable-FK Eigenschaft verwenden möchten:

public virtual int? IDTEST { get; set; } 

Ansonsten müssen Sie HasRequired für eine erforderliche Beziehung zu einem Nicht-Nullable-FK-Eigenschaft verwenden.

+1

Vielen Dank :) das hat – user2541621

+1

gelöst Dies ist eine gute Antwort – abelabbesnabi

+2

Das '?' war die Schlüsseladdition in meinem Fall. – jonas