2011-06-29 54 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; 
    }