2015-11-11 75 views
1

我創建了一個新的.NET項目並添加了ADO.NET EF 6.
我通過EF嚮導並選擇Code First from Database。
然後我選擇了一張桌子。我們稱之爲「產品」。
這創建了「公共部分類產品」和「公共部分類Model1」。EF從數據庫中的代碼 - 已經是數據庫中的對象

我立即在我的應用程序中創建了一個查詢「產品」的LINQ查詢,但出現以下錯誤。

There is already an object named 'Product' in the database.

當我運行SQL資料我看到以下內容:

CREATE TABLE [dbo].[Product] ...

我不明白爲什麼這個項目試圖創建表,因爲該表已經存在。

我讀了幾篇文章,告訴我需要啓用遷移,但我真的不希望我的項目能夠在數據庫中創建表。
(我們有一個DBA,不給我們訪問在數據庫中創建「輕鬆」表)

然後我決定嘗試創建一個「遷移」文件夾和一個「內部密封類配置」有以下幾點:

public Configuration() 
{ 
    AutomaticMigrationsEnabled = false; 
    AutomaticMigrationDataLossAllowed = false; 
} 

這給了我一個新的錯誤。

Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration.

如何解決這個問題?

UPDATE
因此,我創建一個都VB.NET和使用完全相同的代碼指向針對同一數據庫C#應用程序。
C#版本的「已存在數據庫」問題。
VB.NET版本沒有「已存在的數據庫」問題。

+0

您是否嘗試過在包管理器控制檯上執行這兩個命令? 「添加遷移」,然後「更新數據庫」。 [這](https://msdn.microsoft.com/en-au/data/jj591621.aspx)可能會幫助你。 –

+0

@Kosala是的我有和那些命令試圖在數據庫中創建一個名爲「dbo .__ MigrationHistory」的表。我試圖從數據庫中使用Code First而不添加更多的表到數據庫中。 – goroth

回答

0

我不知道爲什麼,但在VB.NET中Code First from Database工作正常,但在C#中,這對EF6無法正常工作。

我決定讓C#創建「dbo .__ MigrationHistory」,發現這很好,直到我添加了一個與數據庫中的表名稱相同的新類。
這引起了以下錯誤:

The model backing the 'TEST' context has changed since the database was created. Either manually delete/update the database, or call Database.SetInitializer with an IDatabaseInitializer instance.

以前,我想爲什麼EF遷移需要信息時,我已經有一個數據庫,並試圖用代碼優先「FROM」數據庫。

所以快速計算器搜索導致我下面的文章:
Entity Framework Code Only error: the model backing the context has changed since the database was created
一旦我添加的代碼下面一行在Global.asax然後一切都開始正常工作。

Database.SetInitializer<YourContext>(null); 
-1

你有一個現有的數據庫,你有一個DBA爲你負責。您需要更改爲實體框架數據庫優先方法。這使您可以在不修改數據庫參照完整性的情況下使用現有數據庫。您需要查看數據庫優先方法。這裏快速介紹https://msdn.microsoft.com/en-us/data/jj591506.aspx

+0

微軟在EF 7中要求Code First類型的方法(沒有數據庫設計者),他們已經從數據庫中獲得了EF 6 Code First,所以我想盡量使用它。 – goroth

-1

這裏有一個一步一步的指導方針 https://msdn.microsoft.com/en-us/library/jj200620.aspx。請檢查你的步驟。

它看起來像是thisthis的副本。這個問題上還有很多。

+0

微軟指南告訴你如何使用我已經在做的EF數據庫中的代碼。該指南並沒有告訴用戶我正在使用的「遷移」問題。您列出的第二個鏈接不是重複的,因爲該鏈接適用於不帶現有數據庫的EF Code First。第三個鏈接使用「更新數據庫」,我試圖不這樣做。如果可能,DBA不希望我在數據庫中插入表。 – goroth

相關問題