C# 实体框架赢得';t在数据库中保存更改

C# 实体框架赢得';t在数据库中保存更改,c#,wpf,database,entity-framework,C#,Wpf,Database,Entity Framework,当我尝试向数据库中添加项目时,在运行应用程序后,数据将不会在数据库中保留很长时间。我不知道为什么,连接很好,我已经检查过很多次了 private void InsertIncomeBtn_Click(object sender, RoutedEventArgs e) { float lf = (float)Convert.ToDouble(IncomeText.Text); MessageBox.Show(lf.ToString()); DateTime da

当我尝试向数据库中添加项目时,在运行应用程序后,数据将不会在数据库中保留很长时间。我不知道为什么,连接很好,我已经检查过很多次了

 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();
}
我正在使用VS2017社区并编写WPF应用程序


谢谢您的帮助。

我假设您有一个SQL Server数据库,并且您的连接字符串很可能包含一个
AttachDbFileName=……
条目-正确吗

如果是这样的话:整个AttachDbFileName=方法是有缺陷的——最多!在Visual Studio中运行应用程序时,它将围绕
.mdf
文件进行复制(从
app\u Data
目录复制到输出目录-通常是
\bin\debug
-应用程序运行的地方)和最有可能是,您的
INSERT
工作正常-但您最后看到的是错误的.mdf文件

如果您想继续使用这种方法,请尝试在
myConnection.Close()
调用上放置一个断点,然后使用SQL Server Mgmt Studio Express检查
.mdf
文件,我几乎可以肯定您的数据在那里

我认为真正的解决办法是

  • 安装SQL Server Express(您已经完成了安装)

  • 安装SQL Server Management Studio Express

  • 在SSMS Express中创建数据库,并为其指定一个逻辑名称(例如,
    YourDatabase

  • 使用其逻辑数据库名称连接到它(在服务器上创建时提供),不要乱动物理数据库文件和用户实例。在这种情况下,您的连接字符串类似于:

    Data Source=.\\SQLEXPRESS;Database=YourDatabase;Integrated Security=True
    
    其他一切都和以前一样


  • 更多背景信息,请参见Aaron Bertrand的优秀博文。

    我假设您有一个SQL Server数据库,并且您的连接字符串很可能包含一个
    AttachDbFileName=……
    条目-正确吗

    如果是这样的话:整个AttachDbFileName=方法是有缺陷的——最多!在Visual Studio中运行应用程序时,它将围绕
    .mdf
    文件进行复制(从
    app\u Data
    目录复制到输出目录-通常是
    \bin\debug
    -应用程序运行的地方)和最有可能是,您的
    INSERT
    工作正常-但您最后看到的是错误的.mdf文件

    如果您想继续使用这种方法,请尝试在
    myConnection.Close()
    调用上放置一个断点,然后使用SQL Server Mgmt Studio Express检查
    .mdf
    文件,我几乎可以肯定您的数据在那里

    我认为真正的解决办法是

  • 安装SQL Server Express(您已经完成了安装)

  • 安装SQL Server Management Studio Express

  • 在SSMS Express中创建数据库,并为其指定一个逻辑名称(例如,
    YourDatabase

  • 使用其逻辑数据库名称连接到它(在服务器上创建时提供),不要乱动物理数据库文件和用户实例。在这种情况下,您的连接字符串类似于:

    Data Source=.\\SQLEXPRESS;Database=YourDatabase;Integrated Security=True
    
    其他一切都和以前一样

  • 更多背景信息,请参见Aaron Bertrand的优秀博客文章