【问题标题】:Entity Framework Save not working实体框架保存不起作用
【发布时间】:2014-11-07 10:59:23
【问题描述】:

我正在使用 Entity Framework 将一些数据保存在 SQLite 数据库文件中。

这是我在数据库文件中的表

ID  Name    Username    Pwd

ID 为自增,其余列为Text 类型

这就是我将数据保存到数据库中的方式:

UserInfo userInfo=new UserInfo();
userInfo.Name="abc";
userInfo.Username="xyz";
userInfo.Pwd="123456";

using (var context = new ApplicationContext())
{
    context.UserInfo.Add(userInfo);                
    context.SaveChanges();
}

问题是,这段代码没有向表中插入任何新行。我在保存之前也试过这个,但没有运气

context.Entry<UserInfo>(userInfo).State = EntityState.Added;
context.ChangeTracker.DetectChanges();

我试过调试,没有出现异常。

如何使用 Entity Framework 将新行插入到表中?

【问题讨论】:

  • 连接字符串?你的逻辑很好,我的第一个猜测是你的连接字符串有点时髦!
  • 它是否全部包含在一个 try/catch 块中并且您可能忽略了错误?
  • 连接字符串很好,它检索现有数据但不保存
  • @DavidG 是的,它包含在 try/catch 中
  • 那么您的捕获是否有任何错误?

标签: c# entity-framework


【解决方案1】:

可能导致问题的可能性。

  1. 右键单击您的实体数据模型并从数据库更新模型。以确保您在最后一次更改之前一直更新。
  2. 确保您正在查看正确的数据库和表。每个人都会偶尔犯这个错误。
  3. 确保您使用的是有效的连接字符串。指向正确的数据库。确保它不是旧数据库/其他备份数据库。
  4. 确保您使用的是最新的正确实体。

您拥有的上述代码对我来说完美无缺。我刚刚做了一个锻炼来解决这个问题。

以上几点都是猜测。

参考此链接Entity Data Model Example & One More Example Code available here

【讨论】:

  • 我找不到 AddObject()
  • 仍然没有得到 InsertonSubmit()
【解决方案2】:

我曾经遇到过类似的问题,要确定到底是什么原因可能会很痛苦。在 EF 中可能导致这种行为的一个问题是拥有多个 Context 对象实例,这样当您在 Context 上调用 SaveChanges 时,实际上是在与添加实体的实例不同的实例上调用它(而 EF 确实如此)未检测到实体中的任何更改或新实体未附加到正确的上下文,导致 SaveChanges 不向数据库发送任何 SQL 请求)。

我建议在 VS 中调试它(使用对象 id 功能),以查看您是否有多个上下文实例。使用Unit Of Work pattern together with repositories 是一种更好地控制应用程序中上下文对象生命周期的方法

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-28
  • 2017-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多