2011-06-27 69 views
5

我有以下兩個實體(其中許多,但這些給我的問題)EF 4.1代碼第一次外鍵增加了額外的列

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

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

讓EF創建當我的它抱怨說,我需要關閉級聯刪除,因爲多個路徑,我做了如下。

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

的問題是,當數據庫中創建我得到兩個外鍵,一個被稱爲StartAreaId,正如我所期望的,另一種是StartArea_StartAreaId。僅使用StartAreaId。爲什麼以及如何擺脫StartArea_StartAreaId。如果我刪除上下文中的HasForeignKey並從實體中刪除StartAreaId,我會得到多個StartArea_StartAreaId列,如StartArea_StartAreaId和StartArea_StartAreaId1。我需要做些什麼來阻止這種情況的發生?我只想將StartAreaId作爲我的外鍵。

回答

3

的問題是空WithMany

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

是啊,當然了,不知道爲什麼我沒有想到這一點。謝謝。 – Dirk

+1

謝謝拉迪斯拉夫!受益於你的許多答案,包括這一個。只有觀察,這個問題是間歇性的(我的同事並沒有被迫提供WithMany中的任何東西,但是我必須......(你應該得到EF上的MVP :)) –