【问题标题】:Unable to save data to Entity Model Database using saveChanges() method无法使用 saveChanges() 方法将数据保存到实体模型数据库
【发布时间】:2013-05-17 18:56:20
【问题描述】:

我正在尝试将数据保存到我的数据库中。我想要的是,当按下按钮时,数据会永久保存到数据库中。我已经完成了在应用程序运行时保存代码的测试。保存的数据是可见的。但是当我终止应用程序时,当我在 Visual Studio 中查看该表的数据时,数据不存在。我提供了用于测试的代码。

private void btn_otrFun_Click(object sender, EventArgs e)
    {
        tblCheese cheese = new tblCheese();
        string cheesename = "TestCheese";
        cheese.CheeseName = cheesename;
        cheese.CheeseGroup = 1;
        cheeseEntity.tblCheese.AddObject(cheese);
        cheeseEntity.SaveChanges();
    }

这是我获取上下文表单的地方。它在表单的开头被实例化。

 private CheeseWorld_DatabaseEntities cheeseEntity = new CheeseWorld_DatabaseEntities(); //instanciate new database entities

此外,我还使用这个 sn-p 从数据库中检索数据以动态创建按钮。

var cheeselist = cheeseEntity.ExecuteStoreQuery<tblCheese>("Select * FROM tblCheese WHERE cheeseGroup = 1", null).ToList();

希望这些进一步的细节有所帮助。如果需要更多,请告诉我。

【问题讨论】:

  • 尝试返回一个int,其中包含受影响的行数:int rows = cheeseEntity.SaveChanges(),以确保您确实在更新表。此外,您可能希望将 SaveOptions 参数设置为 AcceptAllChangesAfterSave
  • 可能是你的鼠标有问题?
  • 听从 Evan 的建议,我将最后一行更改为 int rows = cheeseEntity.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);更改仍未显示在数据库中。当我查看 tblcheese 的表数据时,我之前拥有的条目已经存在,但新条目不存在。虽然,它出现在应用程序中。这让我很困惑。

标签: c# database entity-framework insert sql-update


【解决方案1】:

您已经偏离了我们通常用于此的正常模式...也许尝试将其放回类似的东西...(我不知道您从哪里获得上下文)

using (var context = new cheeseEntity()) {
    tblCheese cheese = new tblCheese();
    cheese.CheeseName = "TestCheese";
    cheese.CheeseGroup = 1;
    context.tblCheese.Add(cheese);
    context.SaveChanges();
}

文档中对此进行了介绍:http://msdn.microsoft.com/en-us/data/jj593489 (注意底部显示如何跟踪生成的 SQL)

注意:我使用的是 Add 而不是 AddObject。

【讨论】:

  • 我正要自己发布,我很好奇上下文是在哪里创建的。
  • 是的,它看起来像是 ASP.Net 应用程序的一部分,如果上下文是局部变量或其他东西,我认为它不会为事件保留。不过,这应该会导致 NullReference 异常,因此它不能解释他所看到的行为。
  • Jasmine,我按照你的方法试过了。我没有得到 add 方法。相反,我收到一条消息,指出“添加”不存在定义。我改变的是回到 addObject 并且它有效。但就像之前的问题一样。至于上下文,我是从表格开头的先前声明中得到的。我将上下文称为 cheeseEntity。如果您假设 cheeseEntity 是数据库名称,我很抱歉造成了混乱。
  • 是的,您使用了一个有趣的命名约定,很难分辨代码示例中的类型。如果您没有 Add 方法,则说明您正在使用错误类型的对象。
  • 按照您的示例中的编写方式,您有两种不同类型的东西,称为“tblCheese”——一种是您的对象,另一种是您的收藏。当您偏离命名约定时,让我们区分它们的标准尚未实施。通常你有一个名为“Cheese”的对象和一个名为“Cheese”的集合
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-25
  • 2013-03-13
  • 1970-01-01
  • 1970-01-01
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多