2014-10-20 102 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