实体框架保存不起作用

时间:2014-11-07 10:59:23

标签: c# entity-framework

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

这是我在DB文件中的表

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将新行插入表?

2 个答案:

答案 0 :(得分:0)

可能导致问题的可能性。

  1. 右键单击您的实体数据模型并从数据库更新模型。确保您已更新到最后一次更改。
  2. 确保您正在查看正确的数据库和表。每个人偶尔犯这个错误。
  3. 确保使用有效的连接字符串。指向正确的数据库。确保它不是旧的db /其他备份db。
  4. 确保您使用的是最新的正确实体。
  5. 您拥有以上代码,它对我来说非常合适。我刚刚做了一个锻炼来解决这个问题。

    以上几点是猜测。

    请参阅此链接Entity Data Model Example&amp; One More Example Code available here

答案 1 :(得分:0)

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

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