context.SaveChanges()不保存数据库中的数据

时间:2013-05-14 11:33:46

标签: sql-server asp.net-mvc-3

我正在开发一个MVC应用程序。

当我调用context.SaveChanges来更新特定记录时。更新未在数据库中注册。我也没有得到任何运行时错误。所有通知都是我的记录没有更新。我仍然看到相同的价值观。插入功能完美无缺。

enter code here

public Admission Update(int stuid){

        VDData.VidyaDaanEntities context = new VDData.VidyaDaanEntities();
        VDData.Student_Master studentmaster = new VDData.Student_Master();

        studentmaster.Student_ID = stuid;
        studentmaster.Student_First_Name = this.FirstName;
        studentmaster.Student_Middle_Name = this.MiddleName;
        studentmaster.Student_Last_Name = this.LastName;
        studentmaster.Student_Address_1 = this.Address;
        studentmaster.Student_Address_2 = this.Address2;
        studentmaster.Student_City = this.City;
        studentmaster.Student_State = this.State;
        studentmaster.Student_Pin_Code = this.Pincode;

       context.SaveChanges(); // here it wont give any kind of error. it runs sucessfully. }

3 个答案:

答案 0 :(得分:1)

首先获取您要更新的实体:

var entity = obj.GetEntity(id);
entity.col1 = "value";
context.SaveChanges(entity);
希望这会有所帮助。

答案 1 :(得分:0)

context.SaveChanges();

您需要调用此

context.Student_Masters.Add(studentmaster );

修改:向您的Abstraction介绍Context class并在您的上下文类中创建方法,如下所示,然后您可以在想要创建或更新对象时调用它

public void SaveStudent_Master(Student_Master studentmaster)
    {
        using (var context = new VDData.VidyaDaanEntities())
        {
            if (studentmaster.Student_ID == 0)
            {
                context.Student_Masters.Add(studentmaster);
            }
            else if (studentmaster.Student_ID > 0)
            {
                //This Updates N-Level deep Object grapgh
                 //This is important for Updates  
                var currentStudent_Master = context.Student_Masters
                    .Single(s => s.Student_ID == studentmaster.Student_ID );

                context.Entry(currentStudent_Master ).CurrentValues.SetValues(studentmaster);                  
            }
            context.SaveChanges();
        }

然后在您的Controller中用context.SaveChanges();

替换_context.SaveStudent_Master(studentmaster);

答案 2 :(得分:0)

好像你想要更新,所以你的代码应该是

VDData.Student_Master studentmaster = context.Student_Masters.Single(p=>p.Student_ID == stuid);

如果是主键,则不应更改Student_ID。

public Admission Update(int stuid){

        VDData.VidyaDaanEntities context = new VDData.VidyaDaanEntities();
        //VDData.Student_Master studentmaster = new VDData.Student_Master();
//REPLACE WITH
VDData.Student_Master studentmaster = context.Student_Masters.Where(p=>p.Student_ID == stuid);

        studentmaster.Student_ID = stuid;
        studentmaster.Student_First_Name = this.FirstName;
        studentmaster.Student_Middle_Name = this.MiddleName;
        studentmaster.Student_Last_Name = this.LastName;
        studentmaster.Student_Address_1 = this.Address;
        studentmaster.Student_Address_2 = this.Address2;
        studentmaster.Student_City = this.City;
        studentmaster.Student_State = this.State;
        studentmaster.Student_Pin_Code = this.Pincode;

       context.SaveChanges();