2011-06-29 57 views
0

这是一个创纪录的是我的代码:更新与实体框架不工作

... 
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; 
    } 

代码编译并执行罚款,但数据库没有变化,这是所有的信息是,正是因为它是一样的在更新之前。任何帮助将不胜感激,谢谢!

+0

我不明白你想要做H的什么ERE。检索一个Domain.Box对象,然后将其值设置为一个新对象? –

+1

webyac,您正在覆盖_reference_。 FirstOrDefault框中没有任何内容。 –

回答

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(); 
+0

谢谢,我确实缺少对ET对象的引用 – webyacusa

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; 
    } 
+1

我不认为你需要通过引用传递,除非Domain.Box是一个值类型。 –

+0

而BoxId可能不应该改变。 –

+0

好点!代码已更新。 –

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; 
    }