实体框架Context.SaveChanges根本不起作用

时间:2014-03-28 09:47:22

标签: c# visual-studio-2012 entity-framework-5

我遇到了这段代码的问题。我能够连接到mdf示例数据库存档并生成实体模型。当我尝试在上下文中更新,删除或插入任何内容并将更改转换为DB Context.SaveChanges时,我能够查询上下文模型并从数据库中检索信息。没有异常,实体模型已正确更新,但数据库没有更改。 谢谢你

public void addCourse(int courseId, int deptId, string courseTitle)
{    
SchoolContexto = new SchoolEntities();            

Course mycourse= new Course();
mycourse.CourseID = courseId;
mycourse.Credits = 10;
mycourse.DepartmentID = deptId;
mycourse.Title = courseTitle;
SchoolContexto.Courses.Add(mycourse);            

SchoolContexto.SaveChanges();
SchoolContexto.Dispose();
}

7 个答案:

答案 0 :(得分:6)

将解决方案中的.mdf文件的属性设为 复制到输出目录:"仅在较新的"

时复制

否则每次运行时都会覆盖db文件

答案 1 :(得分:2)

我建议你使用这段代码:

public void addCourse(int courseId, int deptId, string courseTitle)
{    
     SchoolEntities entities = new SchoolEntities();            

     Course mycourse= new Course();
     mycourse.CourseID = courseId;
     mycourse.Credits = 10;
     mycourse.DepartmentID = deptId;
     mycourse.Title = courseTitle;
     entities.Courses.Add(mycourse);            

     entities.SaveChanges();

 }

如果这不起作用,我建议你查看你的app.config文件:)

答案 2 :(得分:1)

向上下文添加新实体的另一种方法是将其状态更改为“已添加”。你试过这个吗?

using (var entities = new SchoolEntities()) 
{ 
    Course mycourse= new Course();
    mycourse.CourseID = courseId;
    mycourse.Credits = 10;
    mycourse.DepartmentID = deptId;
    mycourse.Title = courseTitle;
    context.Entry(mycourse).State = EntityState.Added;
    entities.SaveChanges(); 
}

答案 3 :(得分:0)

我认为问题在于你在使用localdb(.mdf)文件。 我遇到了同样的问题,但是当我创建新的(sql server数据库连接)时 服务器名称:(localdb)\ MSSqlLocaldb ....它工作

答案 4 :(得分:0)

稍微偏离主题,以防万一您因为执行更新而不是添加而在这里,请检查是否需要桌上的钥匙。 EF Core也有类似的问题。在更新表期间,没有错误生成,但是SaveChanges返回0。直到我测试添加记录后,它才生成键错误。我解决了关键问题,并且更新顺利。

答案 5 :(得分:0)

发生这种情况的原因可能是您的 Course 实体中没有主键。

答案 6 :(得分:-3)

我通过包含以下命名空间

解决了这个问题
using System.Data.SqlClient;