2011-06-27 11 views
5

Mam następujące dwa podmioty (wśród wielu, ale to daje mi problemu)EF 4.1 Kod Pierwszy klucz obcy dodaje kolumnie Extra

public class StartPoint 
{ 
    public int StartPointId { get; set; } 
    public string Description { get; set; } 
    public int StartPointNumber { get; set; }  
    public int StartAreaId { get; set; } 
    public StartArea StartArea { get; set; } 
}  

i

public class StartArea 
{ 
    public int StartAreaId { get; set; } 
    public string Description { get; set; } 
    public ICollection<StartPoint> StartPoints { get; set; } 
} 

Kiedy pozwalając EF stworzyć mój baza danych narzekała, że ​​muszę wyłączyć usuwanie kaskadowe z powodu wielu ścieżek, co zrobiłem w następujący sposób.

 modelBuilder.Entity<StartPoint>() 
      .HasRequired(x => x.StartArea) 
      .WithMany() 
      .HasForeignKey(x => x.StartAreaId) 
      .WillCascadeOnDelete(false); 

Problem jest, gdy baza danych jest tworzona mam dwa klucze obce, jeden nazywa StartAreaId, jak bym się spodziewał, a druga jest StartArea_StartAreaId. Używa się tylko StartAreaId. Dlaczego i jak pozbyć się StartArea_StartAreaId. Jeśli usuwam HasForeignKey w kontekście i usuwam StartAreaId z encji, otrzymuję wiele kolumn StartArea_StartAreaId, jak w StartArea_StartAreaId i StartArea_StartAreaId1. Co muszę zrobić, aby temu zapobiec? Chcę tylko StartAreaId jako mój klucz obcy.

Odpowiedz

3

Problemem jest pusty WithMany:

modelBuilder.Entity<StartPoint>() 
     .HasRequired(x => x.StartArea) 
     .WithMany(y => y.StartPoints) 
     .HasForeignKey(x => x.StartAreaId) 
     .WillCascadeOnDelete(false); 
+0

Tak, oczywiście, nie wiem, dlaczego nie myśleć o tym. Dziękuję Ci. – Dirk

+1

Dzięki Ladislav! Korzystały z wielu odpowiedzi, w tym ten. Tyle tylko, że ten problem jest sporadyczny (kolega nie był zmuszony do dostarczenia czegokolwiek w WithMany, ale musiałem (zasłużyłeś na MVP na EF :)) –