2014-05-16 38 views
0

我正在學習EF代碼的第一種方法,並遵循本教程http://msdn.microsoft.com/en-US/data/jj193542。當應用程序第一次運行時,它在C:\ Users \ User123 \目錄中創建了一個數據庫,並將記錄添加到Blogs表中。然後,我評論了將記錄添加到數據庫的代碼,並正確檢索了記錄。.Net如何將DBContext綁定到特定數據庫

然後我想將數據庫移動到項目下的一個文件夾中,所以我將它從C:\ Users剪切到項目中名爲Data的文件夾中,並在app.config中添加了一個連接字符串,並將連接字符串的名稱用於BloggingContext構造這樣

public BloggingContext() : base("MyConnection") 

這裏是連接字符串:

name="MyConnection" 

providerName="System.Data.SqlClient" 

connectionString="Data Source=(localdb)\v11.0;AttachDbFileName=|DataDirectory|\MyDB.mdf; Initial Catalog=MyDB;Integrated Security=True;MultipleActiveResultSets=True" 

但是,當我運行應用程序它說無法連接。所以:

問題1:這不是一個正確的連接字符串嗎?

然後我從項目中刪除了數據庫,認爲BloggingContext會重新創建數據庫。但令我驚訝的是,這次並沒有創建數據庫。但是,如果將db上下文名稱從BloggingContext更改爲BloggingContext_New(或其他),則會再次創建數據庫。

每次我把一個新名稱創建一個新的數據庫,但是當我把BloggingContext,它不會創建數據庫。所以,我有另一個問題

問題2:.Net保持DBCOntext與數據庫的關聯,並且有什麼方法可以找到/編輯或刪除它,以便我可以重新創建一個與以前具有相同名稱的數據庫一?

非常感謝您閱讀長問題。

回答

0

問題1:這不是正確的連接字符串嗎?

這是正確的。

問題2:哪裏的.Net保持的DbContext的關聯DB和有沒有辦法找到/編輯或刪除這一點,所以我可以用相同的名字前一個重新創建一個數據庫?

你需要確保下面要重新創建一個數據庫同名

  1. 首先去服務器資源管理器在Visual Studio中,檢查是否這樣做的「密度纖維板」數據連接項目已連接,如果是,請右鍵單擊並刪除。

  2. 轉到解決方案資源管理器,單擊顯示所有文件圖標。

  3. 轉到App_Data,右鍵單擊並刪除該項目的所有「.mdf」文件。

(並確保消除所有遷移相關的文件夾和文件,如果你使用的遷移)

0

當你說你把它移動到文件夾命名的數據,你的意思是你創造一個名爲數據的文件夾放在那裏? The | DataDirectory |連接字符串中的部分特指特定於Web項目中存在的app_data文件夾。如果你沒有,你需要用鼠標右鍵單擊Web項目並選擇添加 - > ASP.NET文件夾並選擇App_Data。 每當發生這種類型的問題時,它幾乎總是一個權限問題。在將此站點部署到託管提供者(例如,Azure)時,請小心,IIS進程不會具有對此文件夾的寫入權限,因此最好在創建項目後將該數據庫包含在項目中。您可以通過點擊顯示所有文件圖標解決方案管理器的頂部,擴大App_Data文件夾,右鼠標點擊的.mdf /。自衛隊和選擇做這個項目包括

+0

*最好在創建項目後將數據庫包含在項目中。通過這個,你的意思是,只是爲了確保數據庫被放在App_data文件夾中?或者還有其他一些行動需要這樣做? – Zeeshan

0

問題1:這是不是正確的連接字符串?

如果您的數據庫文件存在於您的項目結構中,那麼當您構建/重建時,它將在調試文件夾中重新創建該文件。

這就是爲什麼當你手動從輸出編譯文件夾中刪除文件時,如果你沒有再次編譯就運行該程序,它將導致連接錯誤。

連接字符串沒問題。

問題2:哪裏的.Net保持的DbContext的關聯DB是 有沒有辦法找到/編輯或刪除這一點,所以我可以用相同的名字前一個重新創建一個 DB?

如果您需要自定義行爲,您需要告訴DbContext管理數據庫文件的策略。

例如,我們用我們的一個系統下面的代碼,那滴並創建數據庫,每次應用程序啓動時:

static EntityContext() 
    { 
     Database.SetInitializer<EntityContext>(new DbInitializer()); 
     using (EntityContext db = new EntityContext()) 
      db.Database.Initialize(false); 
    } 

    class DbInitializer : DropCreateDatabaseAlways<EntityContext> 
    { 
    } 

而對於聯想,如果不定義連接字符串對於DbContext,它將使用app.config中定義的那個。

希望它有幫助。

相關問題