2011-06-27 15 views
5

ekler aşağıdaki İki varlık vardır (birçok arasında, ancak bu bana sorunu vermek)EF 4.1 Kod İlk Yabancı Anahtar Ekstra sütununu

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

ve

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

EF oluşturmasına izin yaparken benim veritabanı, aşağıdaki gibi yapmış olduğum çoklu yollar nedeniyle kaskad silme işlemini kapatmam gerektiğinden şikayet etti. Veritabanı iki yabancı anahtarlarını almak oluşturulur

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

sorundur, bir ben beklendiği gibi, StartAreaId denir ve diğer StartArea_StartAreaId mesafesindedir. Sadece StartAreaId kullanılıyor. Neden ve nasıl StartArea_StartAreaId'den kurtulurum. HasForeignKey'i bağlamda kaldırırsam ve StartAreaId öğesini varlıktan kaldırırsam, StartArea_StartAreaId ve StartArea_StartAreaId1'de olduğu gibi birden çok StartArea_StartAreaId sütunu alırım. Bunu önlemek için ne yapmam gerekiyor? Ben sadece StartAreaId'i yabancı anahtarım olarak istiyorum.

cevap

3

sorun boş WithMany: Ben bu düşünmedim neden

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

Evet, tabii ki, bilmiyorum. Teşekkür ederim. – Dirk

+1

Teşekkürler Ladislav! Bunun dahil birçok cevabınızdan faydalanın. Sadece gözlem şu ki, bu sorun aralıklı (meslektaşım WithMany'de bir şey sağlamaya zorlanmadı, ama mecbur kaldım (MVP'yi EF'de hak ettiniz :)) –