实体框架6.1删除一列

时间:2014-10-20 14:12:14

标签: c# sql-server entity-framework

我正在使用Entity Framework(当前版本6.1.1)数据库优先和Sql Express 2008作为存储。我有一个非常简单的模型,它由两个表Foo和FooElements组成,具有一对多的关系。

我已从表Foo中删除了列Bla,打开了我的.edmx文件,右键单击了一个空格并从数据库中选择了#34;更新模型",但删除的字段仍保留在模型中。

当我尝试从数据库中获取Foo实体时,会抛出异常:无效的列名Bla。所以我从模型中删除了整个Foo实体,再次从DB添加它,现在我有另一个例外 - 属性Bla不存在。

我尝试重新启动Visual Studio,删除obj和bin文件,从项目中完全删除数据模型并从头创建它 - 它需要模型中的属性Bla,但是当我手动创建它时失败(列Bla未创建因此,DB中不存在该列。

使我的项目再次运行的唯一解决方案是再次在DB中创建列Bla并将其保留在那里,尽管事实上我并不需要它。

有没有办法从DB中删除列,以便Entity框架可以在以后工作? 有什么样的缓存文件我要清理吗? 谢谢。

P.S。即使认为edmx文件中不存在该字段,实体框架仍然认为它是必需的。在哪里可以得到一个想法,DB中仍然存在某些字段?

2 个答案:

答案 0 :(得分:1)

谢谢大家的意见。

这个问题比我想象的更为微不足道。我的沙盒解决方案中的另一个项目有Entity Framework引用数据库中的同一个表,它有相同的模型名称,因为我完全忘了它,我没有更新它,第二个项目中的.edmx文件包含旧的删除的字段。从来没有想到两个不同的组件会像这样干涉,但他们确实如此。

解决方案是删除(或重命名)第二个项目中的模型,它现在正在运行。

答案 1 :(得分:0)

最近发生在我身上。

尝试使用 Update-database 手动运行 -force (即使您正在使用自动迁移,请执行此操作):

Bla 列手动返回到数据库,还要从模型中删除 Bla 字段并运行:

Update-database -verbose -force -ConfigurationTypeName Configuration 

您可以使用您的配置名称代替" Confiuration"

在某些情况下,比如有多个配置时,您必须像这样指定配置完整路径:

AppName.MigrationsNameSpace.ConfigurationName 

(大部分时间只是"配置" ,其中" ConfigurationName"是