2013-07-02 13 views
30

Mam problemy konfigurowania relacji klucza obcego w moim Entity Framework biegle API:Problemy tworząc relację klucza obcego w Entity Framework

Oto głowa raportu:

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

ten jest szczegół raportu

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

I to jest moja płynna definicja API obu. Głowica raportu:

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

szczegółowości raportu:

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

    } 

Na realizację I zawsze ten błąd

System.Data.Entity.Edm.EdmAssociationType:: Wielokrotność konflikty z ograniczeniem referencyjnym w roli "Dettaglio_TEST_TABLE_Target" w relacji "Dettaglio_TEST_TABLE". Ponieważ wszystkie właściwości w roli zależnej nie są zerowalne, wielość roli głównej musi mieć wartość "1".

Co, jak sądzę, oznacza, że ​​coś zawodzę w definicji klucza obcego, ale tak naprawdę nie wiem, na co patrzeć. Każda pomoc/podpowiedź jest doceniana.

Odpowiedz

89

Istnieje konflikt między mienia klucza obcego w klasie Dettaglio ...

public virtual int IDTEST { get; set; } 

... który ma typ non-zerowalne (int), a zatem nie mogą być opcjonalne i Twój mapowanie ...

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

... gdzie chcesz, aby związek był opcjonalny.

Jeśli rzeczywiście chcesz opcjonalny związek użyć zerowalne właściwość FK:

public virtual int? IDTEST { get; set; } 

W przeciwnym razie należy użyć HasRequired do wymaganego związku z non wartości pustych nieruchomości FK.

+1

Bardzo dziękuję :), które rozwiązało – user2541621

+1

To jest dobra odpowiedź – abelabbesnabi

+2

"?" był kluczowym dodatkiem w moim przypadku. – jonas

Powiązane problemy