2017-07-17 53 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”)]',还是保持单数? –