我正在使用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中仍然存在某些字段?
答案 0 :(得分:1)
谢谢大家的意见。
这个问题比我想象的更为微不足道。我的沙盒解决方案中的另一个项目有Entity Framework引用数据库中的同一个表,它有相同的模型名称,因为我完全忘了它,我没有更新它,第二个项目中的.edmx文件包含旧的删除的字段。从来没有想到两个不同的组件会像这样干涉,但他们确实如此。
解决方案是删除(或重命名)第二个项目中的模型,它现在正在运行。
答案 1 :(得分:0)
最近发生在我身上。
尝试使用 Update-database
手动运行 -force
(即使您正在使用自动迁移,请执行此操作):
将 Bla 列手动返回到数据库,还要从模型中删除 Bla 字段并运行:
Update-database -verbose -force -ConfigurationTypeName Configuration
您可以使用您的配置名称代替" Confiuration" 。
在某些情况下,比如有多个配置时,您必须像这样指定配置完整路径:
AppName.MigrationsNameSpace.ConfigurationName
(大部分时间只是"配置" ,其中" ConfigurationName"是