2014-01-19 95 views
2

我有一個C#winforms應用程序和一個SQL Server .mdf數據庫文件。實體框架SaveChanges不起作用

我試圖使用實體框架。它從數據庫中檢索數據時效果很好,但在調用.SaveChanges()時沒有任何反應。沒有錯誤,沒有例外,也沒有保存更改。

這個問題讓我瘋狂。我發現了幾乎相同問題的一堆問題,但這兩個答案都不適用於我的案例。

我的代碼看起來像這樣:

using (World_ParkingEntities context = new World_ParkingEntities()) 
{ 
    client _client = context.CreateObject<client>(); 
    _client.name = name; 
    _client.mobile_number = phoneNo; 
    _client.email = email; 
    context.AddToclients(_client); 
    context.SaveChanges(); 
} 

我的連接字符串:

<add name="World_ParkingEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\World_Parking.mdf;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" /></connectionStrings> 
+0

閱讀我的評論http://stackoverflow.com/問題/ 21215864/access-db-no-reaction-from-db#comment31952206_21215864 –

+0

我看到了很多來自你的評論......你的意思究竟是哪一個? – user2717436

+0

「重複」一個 –

回答

3

整個用戶實例和AttachDbFileName =方法是有缺陷的 - 在最好的!在Visual Studio中運行應用程序時,它將複製.mdf文件(從您的App_Data目錄到輸出目錄 - 通常爲.\bin\debug) - 最有可能爲,您的INSERT工作得很好 - 但是您只是看着錯誤.mdf文件到底!

如果你想堅持這種方法,那麼試着在context.SaveChanges();調用之後放一個斷點 - 然後用SQL Server Mgmt Studio Express檢查.mdf文件 - 我幾乎可以確定你的數據在那裏。

在我看來真正的解決方案

  1. 安裝SQL Server Express(和你已經做到這一點無論如何)

  2. 安裝SQL Server Management Studio中快速

  3. 創建您的數據庫SSMS Express,給它一個邏輯名稱(例如World_Parking

  4. 使用其邏輯數據庫名稱連接到它(在服務器上創建時給出) - 並且不要亂用物理數據庫文件和用戶實例。在這種情況下,您的連接字符串將是這樣的:

    Data Source=.\\SQLEXPRESS;Database=World_Parking;Integrated Security=True 
    

    和其他一切是正是和以前一樣......

+0

這是否意味着我的數據庫將位於本地工作的服務器上? – user2717436

+0

要使用'.mdf',無論如何你都需要一個SQL Server實例 - 沒有其他方法可以做到這一點。實際上,在服務器實例上創建數據庫**會更容易一些,而不是使用有缺陷的(並且已棄用的)'AttachDbFileName ='方法 –