LINQ to Entities更新记录

时间:2014-02-17 15:03:15

标签: c# linq entity-framework

我是新手使用LINQ with Entities我有以下内容我正在尝试运行更新。

 OEEPumaDBEntities PumaOEEModel = new OEEPumaDBEntities();
 Parameter1 parameter = new Parameter1();
 parameter.ProductionWarning = int.Parse(txtProductionWarning.Text);
 parameter.ProductionDistress = int.Parse(txtProductionDistress.Text);
 parameter.ShiftStart = cmbShiftStart.Text;

 try
 {
     PumaOEEModel.SaveChanges();

 }
 catch
 {
     throw new Exception("Could not save changes.");  
 }

当我运行代码时,它调试很好,并没有发现任何错误。但是,当我检查SQL数据库时,它没有使用新数据更新记录。我已经更改了代码并可以添加新行但由于某种原因我无法更新记录。任何人都可以看到上述代码的任何问题以及如何改变这个问题的建议吗?

6 个答案:

答案 0 :(得分:2)

如果要插入新实体,需要先将其附加到数据库上下文:

PumaOEEModel.Parameters.Add(parameter);

如果您要更新对象,则需要先找到它。 因此,不是parameter = new Parameter()而是加载它:

var parameter = PumaOEEModel.Parameters.FirstOrDefault(p => p.ParameterId == 1);

(假设您的PumaOEEModel是数据上下文。)

答案 1 :(得分:1)

您需要从PumaOEEModel检索实体,然后在调用PumaOEEModel.SaveChanges()之前更新其中的属性。像下面这样的东西。顺便说一句,您需要使用使用块正确处理OEEPumaDBEntities。

using (var PumaOEEModel = new OEEPumaDBEntities())
{
    Parameter1 parameter = PumaOEEModel.Parameters.Single(p => p.Id == 1);

    parameter.ProductionWarning = int.Parse(txtProductionWarning.Text);
    parameter.ProductionDistress = int.Parse(txtProductionDistress.Text);
    parameter.ShiftStart = cmbShiftStart.Text;

    try
    {
        PumaOEEModel.SaveChanges();

    }
    catch
    {
        throw new Exception("Could not save changes.");  
    }
}

答案 2 :(得分:0)

我假设您要更新Parameter1对象参数。 但是,在您的代码中,您正在初始化一个新的Parameter1对象,而不是从SQL db获取要更新的对象。

答案 3 :(得分:0)

OEEPumaDBEntities PumaOEEModel = new OEEPumaDBEntities();
var parameter = PumaOEEModel.Parameters.Single(x => x.ID == myParameterId);
parameter.ProductionWarning = int.Parse(txtProductionWarning.Text);
parameter.ProductionDistress = int.Parse(txtProductionDistress.Text);
parameter.ShiftStart = cmbShiftStart.Text;
PumaOEEModel.SaveChanges();

答案 4 :(得分:0)

应该是这样的:

    OEEPumaDBEntities PumaOEEModel = new OEEPumaDBEntities();

    // id here is the id of the record you want to update
    Parameter1 parameter = PumaOEEModel.Parameter1.Singl(p=>p.ID == id);

    parameter.ProductionWarning = int.Parse(txtProductionWarning.Text);
    parameter.ProductionDistress = int.Parse(txtProductionDistress.Text);
    parameter.ShiftStart = cmbShiftStart.Text;

    try
    {
        PumaOEEModel.SaveChanges();

    }
    catch
    {
        throw new Exception("Could not save changes.");  
    }

答案 5 :(得分:0)

尝试使用AddObject,如果它是新对象,例如...

PumaOEEModel.AddObject(parameter);
PumaOEEModel.SaveChanges();

Attach如果是更新

var parameter = context.PumaOEEModel.Find(PrimaryKey); 
//update parameter properties
PumaOEEModel.Attach(parameter);
PumaOEEModel.SaveChanges();