2015-05-29 61 views
0

首先,我在腳下開槍自殺。我建立一個測試應用程序(這是工作相關的,不是學校BTW)。我有一個外鍵屬性代碼優先/ EF6中的固定模型/列映射

Home_TeamId 

一個模型映射成一列叫做在我的數據庫

Home_TeamId。一切都很開心,直到我重構了所有使用ID而不是Id的東西。我沒有注意到移民增加了一個名爲Home_TeamID1列並在那裏保存,而不是Home_TeamId數據

所以我想要做的是什麼(我想要它。):

  1. 降列Home_TeamID1(沒問題,我可以那樣做。)

  2. 將Home_TeamId重命名爲Home_TeamID。 (沒問題,我可以那樣做。)

  3. 告訴EF將數據寫入原始列。

我讀過如何在使用的DbContext數據庫映射,但是這不是我想要做的是(即,這是一次性的事情,不是我需要做的)(順便說一句,沒有.edmx文件)

所以這就是問題 - 我如何告訴EF將域模型中的Home_TeamID字段寫入表中的Home_TeamID列?

我應該補充一點,自那時以來我做了另一次遷移,所以它不是(必然)如此簡單以至於只返回一個修訂版本。

編輯1: EF已將相同的Team ID寫入Home_TeamID和Home_TeamID1列,儘管它已將..ID1文件作爲外鍵。

我已經在我的項目中查找了文本「ID1」(文本和二進制Unicode),並且它顯示的唯一位置在* _migration.cs文件中。

在此期間,我已經嘗試過上述步驟1和2。而現在(預期)我得到:

InnerException: System.Data.SqlClient.SqlException HResult=-2146232060 
Message=Invalid column name 'Home_TeamID1'. 
Invalid column name 'Visitors_TeamID1'. 

編輯2:

我嘗試這樣做:

  1. 創建一個全新的(空白數據庫)
  2. 排除所有的.cs文件從項目遷移
  3. 添加遷移InitialRecreate
  4. 查看生成的.cs文件並刪除了任何參考ID1。 (實際上,有兩個...他們從哪裏來的?)
  5. 在項目中找到並找到0個對ID1的引用。
  6. 更新數據庫
  7. 冉項目
  8. 無效的列名稱Home_TeamID1「。

所以顯然問題不在於數據庫本身。

+0

model屬性已被重命名,但原始數據庫列沒有?你的數據庫是否區分大小寫? – jjj

+0

不,發生的事情是我在模型中以某種方式結束了這兩種情況,但由於數據庫不區分大小寫,它拋出了SQL錯誤(兩次添加相同的參數)。 – Duston

回答

0

這是一個超越人類的軟件案例。在我的 「上級」 GameSummary類,我有:

public int GameSummaryID { get; set; } 
public int Home_TeamID { get; set; } 
public virtual Team Home { get; set; } 
public int Visitors_TeamID { get; set; } 
public virtual Team Visitors { get; set; } 

而在團隊I類有:

public int TeamID { get; set; } 

所以EF是創建兩列,一爲Home_TeamID(場Home_TeamID在GameSummary類),還有一個用於Home_TeamID(指向Team對象的導航屬性的外鍵)。解決方案:

public int GameSummaryID { get; set; } 
public int HomeTeamID { get; set; } 
public virtual Team Home { get; set; } 
public int VisitorsTeamID { get; set; } 
public virtual Team Visitors { get; set; }