【问题标题】:C# Entitity framework SaveChanges() not workingC# 实体框架 SaveChanges() 不起作用
【发布时间】:2011-03-17 02:00:24
【问题描述】:

运行此代码后,我在我的数据库中找不到任何条目。 我没有收到代码错误。

有人知道我做错了什么吗?

PeopleEntities1 db = new PeopleEntities1();


            Person roger = new Person() 
            {  
                age = 25,
                firstname = "Roger", 
                lastname = "Rabbit", 
                location = "Canada", 
                job = "freelance", 


            };

            db.AddToPeople(roger);
            db.SaveChanges(true);

【问题讨论】:

  • 您在使用 SQL Server,如果是,您可以运行 SQL Profiler 并查看正在对数据库执行的操作吗?
  • 您的数据库的位置是什么?确保您不是每次运行代码时都将其复制到输出目录。我每次运行应用程序时都会复制到输出目录的 SQLite 数据库可能有类似的问题,这使我丢失了在上次运行期间所做的更改。
  • 这正是发生的事情;我在项目目录中创建数据库,但是当它运行时再次在 bin 目录中创建 db 文件。
  • 我不知道我是否应该这样做,但我已经转发了我的评论作为答案。请接受它:)

标签: c# .net entity-framework entity


【解决方案1】:

您的数据库的位置是什么?确保您不是每次运行代码时都将其复制到输出目录。每次运行我的应用程序时,我的 SQLite 数据库都被复制到输出目录,这可能会导致我丢失了我在上次运行期间所做的更改

【讨论】:

  • 我在 2010 Express 中创建了一个标准的 C# 控制台应用程序,使用向导创建了一个简单的 sql express db 文件,该文件放置在项目目录中,使用向导生成基于新创建的数据库,写了几行来测试实体。问题是每次我运行应用程序时,它都会在 exe 每次覆盖自身的任何目录中重新创建 DB 文件,并完全忽略位于项目目录中的原始 db 文件
  • 那么有什么解决办法呢?
【解决方案2】:

用 db.People.Add() 代替 db.AddToPeople()。

另外,在 db 变量周围包裹一条 using 语句,以确保正确处理上下文和连接。

这适用于 EF4 和 .NET 4.0。

假设您有一个名为“人员设置”的列表。

希望这会有所帮助! :)

代码如下:

using (PeopleEntities1 db = new PeopleEntities1())
{


            Person roger = new Person() 
            {  
                age = 25,
                firstname = "Roger", 
                lastname = "Rabbit", 
                location = "Canada", 
                job = "freelance", 


            };

            db.People.Add(roger);
            db.SaveChanges(true);
}

【讨论】:

  • 我似乎没有 db.People.Add() 方法;顺便说一句,我使用向导从数据库创建我的实体类。
  • 好的,根据复数形式,你可能有db.Persons
  • 我最接近的是 db.People.AddObject;这给出了与 db.AddToPeople() 相同的结果,运行时没有错误,但在 DB 中没有条目。
【解决方案3】:

首先,SaveChanges(true) 是一个过时的方法,所以我不建议使用它。您是否尝试过仅使用 SaveChanges() ?喜欢db.SaveChanges()

SaveChanges(boolean) 最接近的方法是SaveChanges(SaveOptions),它使用指定的SaveOptions 保持对数据源的所有更新。

【讨论】:

  • 您的原始评论可能是正确的 - 他需要运行分析器,并查看确切这是针对哪个数据库运行的。我敢打赌他把他的连接字符串弄混了
猜你喜欢
  • 2017-05-09
  • 1970-01-01
  • 1970-01-01
  • 2021-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-03
相关资源
最近更新 更多