2014-10-20 72 views
2

我正在使用实体框架(当前版本6.1.1)的数据库优先和Sql Express 2008作为存储的应用程序。我有一个非常简单的模型,它由两个具有一对多关系的表Foo和FooElements组成。实体框架6.1删除列

我从表中删除美孚列布拉,打开我的.edmx文件,右键单击“从数据库更新模式”空的空间和选择,但删除领域仍然在模型中。

当我尝试从数据库中获取Foo实体时,会引发异常:无效的列名称Bla。所以我从模型中删除了整个Foo实体,再次从DB添加它,现在我又有一个异常 - 属性Bla不存在。我试着重新启动Visual Studio,删除obj和bin文件,完全从项目中删除数据模型,并从头开始创建它 - 它需要在模型中的属性Bla,但手动创建时失败(列Bla不是自动创建,因此该列不存在于数据库中)。

让我的项目再次运行的唯一解决方案是再次在数据库中创建列Bla,并将其留在那里,尽管我不需要它。

有什么办法从数据库中删除一列,以便实体框架可以在事后? 是否有任何种类的缓存文件需要清理? 谢谢。

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

+0

您在这些步骤之后重建了您的解决方案吗? – Haris 2014-10-20 14:16:03

+0

是的。我甚至清理了obj和bin文件夹以防万一。 – 2014-10-20 14:23:42

+0

您是否尝试将该表格添加回.EDMX文件? – Haris 2014-10-20 14:25:44

回答

0

最近发生在我身上。

尝试手动运行Update-database-force(做这个即使your're使用自动迁移):

放回布拉列手动到数据库,还能去除布拉场从模型和运行:

Update-database -verbose -force -ConfigurationTypeName Configuration 

你可以把不是“Confiura和“你的配置名称。

在某些情况下,比如当有多个配置,你必须指定这样的结构完整路径:

AppName.MigrationsNameSpace.ConfigurationName 

(大部分时间,简直是“配置”其中“ConfigurationName “是)

+0

刚编辑我的答案。运行'Update-database'时,** Bla **列应该在DB中并从模型中删除。 – ilans 2014-10-20 16:54:53

1

谢谢大家的意见。

这个问题比我预料的更微不足道。我的沙盒解决方案中的另一个项目是Entity Framework引用数据库中的同一个表,并且它具有相同的模型名称,并且由于我完全忘记了它,所以我没有更新它,并且第二个项目中的.edmx文件包含旧删除的字段。我从来没有想到两个不同的议会会这样干预,但他们做到了。

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

+0

很棒的听到。无论如何,我给出的解决方案和你在这里陈述的内容,应该为其他人解决这个问题。 – ilans 2014-10-22 05:32:49