使用实体框架更新记录不起作用

时间:2011-06-29 19:40:38

标签: c# .net entity-framework

这是我的代码:

...
Domain.Box updatedBox = entities.Boxes.FirstOrDefault(TextBoxBoxID.Text);
updatedBox = getBoxInfo();
entities.SaveChanges();

private Domain.Box getBoxInfo()
    {
        Domain.Box retBox = new Domain.Box();
        retBox.BoxID = TextBoxBoxID.Text;
        retBox.LocationID = Convert.ToDecimal(TextBoxLocationID.Text);
        retBox.Positions = Convert.ToByte(TextBoxPositions.Text);            
        retBox.DiseaseID = RadComboBoxDisease.SelectedValue;
        retBox.SampleTypeID = RadComboBoxSampleType.SelectedValue;
        retBox.TubeTypeId = RadComboBoxTubeTypeID.SelectedValue;

        return retBox;
    }

代码编译并执行正常,但数据库不会更改,也就是说,所有信息都与更新前的信息完全相同。任何帮助将不胜感激,谢谢!

3 个答案:

答案 0 :(得分:2)

如果要插入新的Domain.Box对象,应该这样做:

entities.Boxes.AddObject(getBoxInfo());
entities.SaveChanges();

无需创建updatedBox对象,因为您只是覆盖它。如果我理解你的要求,你想要执行插入,而不是更新。

如果我不正确并且您正在尝试更新updatedBox对象的某些属性,那么只需传递对该对象的引用并更新它的属性:

Domain.Box updatedBox = entities.Boxes.FirstOrDefault(TextBoxBoxID.Text);
getBoxInfo(ref updatedBox);
entities.SaveChanges();

private void getBoxInfo(ref Domain.Box retBox)
{
    retBox.BoxID = TextBoxBoxID.Text;
    ...
}

entities.SaveChanges();

答案 1 :(得分:0)

我会这样试试:

Domain.Box updatedBox = entities.Boxes.FirstOrDefault(TextBoxBoxID.Text);
getBoxInfo(updatedBox);
entities.SaveChanges();

private void getBoxInfo(Domain.Box retBox)
    {
        retBox.LocationID = Convert.ToDecimal(TextBoxLocationID.Text);
        retBox.Positions = Convert.ToByte(TextBoxPositions.Text);            
        retBox.DiseaseID = RadComboBoxDisease.SelectedValue;
        retBox.SampleTypeID = RadComboBoxSampleType.SelectedValue;
        retBox.TubeTypeId = RadComboBoxTubeTypeID.SelectedValue;
    }

答案 2 :(得分:0)

我想你想这样做:

Domain.Box updatedBox = entities.Boxes.FirstOrDefault(TextBoxBoxID.Text);
UpdateBoxInfo(updatedBox);
entities.SaveChanges();

private void UpdateBoxInfo(Domain.Box theBox)
    {
        theBox.BoxID = TextBoxBoxID.Text;
        theBox.LocationID = Convert.ToDecimal(TextBoxLocationID.Text);
        theBox.Positions = Convert.ToByte(TextBoxPositions.Text);            
        theBox.DiseaseID = RadComboBoxDisease.SelectedValue;
        theBox.SampleTypeID = RadComboBoxSampleType.SelectedValue;
        theBox.TubeTypeId = RadComboBoxTubeTypeID.SelectedValue;
    }