2017-07-30 162 views
0

當我嘗試向數據庫中添加項目時,在運行應用程序後,數據將不會在數據庫中存儲很長時間。我不知道爲什麼,這個連接很好,我已經多次檢查過它。實體框架不會保存數據庫中的更改

private void InsertIncomeBtn_Click(object sender, RoutedEventArgs e) 
{ 
    float lf = (float)Convert.ToDouble(IncomeText.Text); 
    MessageBox.Show(lf.ToString()); 

    DateTime date = (DateTime)MovDatePick.SelectedDate; 
    Movments mv1 = new Movments(); 
    mv1.Sum = lf; 
    mv1.Date = date.Date; 

    db.TotalAll.FirstOrDefault().CurrentSum += lf; 
    db.Movments.Add(mv1); 
    db.SaveChanges(); 

    IncomeWin.Close(); 
    MainWindow m = new MainWindow(); 
    m.Show(); 
} 

我正在使用VS 2017社區並撰寫一個WPF應用程序。

感謝您的幫助。

回答

2

假設(從很多以前的問題),你有一個SQL Server數據庫,並在連接字符串最有可能包含AttachDbFileName=.....項 - 是否正確?

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

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

在我看來真正的解決方案

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

  2. 安裝SQL Server Management Studio中快速

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

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

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

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

另見阿龍貝特朗的優秀博客文章Bad habits to kick: using AttachDbFileName更多背景信息。