2017-07-17 131 views
0

我正在使用實體框架代碼首先在我的項目中,我做了一件非常愚蠢的事我無法修復。我已經在SQL Server Management Studio中重命名了一個表,然後在那裏刪除它。然後我重新創建了正確的表格(只是一個'不應該在這裏'的')。現在它不在這裏了,我在查詢中不斷收到異常,因爲EF尋找一個不再存在的表(即使我將它重命名爲無處不在!)。現在我的表格被稱爲RelImpUser,它曾經是RelImpUsers實體框架重命名錯誤

所以我試圖重新創建表中的SQL Server,然後又做了移植用:

public override void Down() 
    { 
     DropTable("dbo.RelImpUsers"); 
    } 

但這不會刪除我的表。每次我執行一個查詢,它看起來在RelImpUsers,它不會爲RelImpUser這是我放在我的代碼中的唯一名稱。任何想法如何解決這一問題?如果你願意,我可以添加一些代碼,我只是覺得它在這裏沒有什麼幫助。

編輯1:它可能與我的表的複數形式有關。所以我所有的表都有複數名字,但是新名字沒有,但是EF仍然是多元化的,因爲我在創建DB Code First時檢查了這個選項。

謝謝!

+1

我推薦在這一塊上燒焦的土壤。從SQL中刪除數據庫,從項目中刪除您的遷移,並從您的數據模型重新初始化(在您更正表名後) – Ortund

+0

EF請哪個版本? – Jimbot

+0

版本6.0.0.0,我想要@Ortund的建議,因爲我需要將我的項目移動到VM,這不是一個真正的問題。 –

回答

1

Code First使用它的模型來構建查詢。您需要將您的註釋類RelImpUser(或添加相當的流暢代碼):

using System.ComponentModel.DataAnnotations.Schema; 

[Table("RelImpUser")] 
public class RelImpUser 
{ 
    public int RelImpID { get; set; } 
    public string Field1{ get; set; } 
    ... 
} 

流利相當於:

modelBuilder.Entity<RelImpUser>().ToTable("RelImpUser"); 

如果你不想多元化的名字,你可以把該公約關:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
} 
+0

我是唯一一個不喜歡使用Fluent API的人嗎?老實說,在給出這些選項的情況下,我會在添加流利的代碼之前絕對選擇DataAnnotation。 – Ortund

+2

我更喜歡流利的代碼。關注點分離。喜歡保持我的POCO P :) –

+0

但是,註釋必須指向複數表?含義'[表(「RelImpUsers」)]',還是保持單數? –