2017-07-30 160 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更多背景信息。