2011-06-06 128 views
3

我想找到一種方法來循環EF對象的屬性並更新這些屬性的值。更具體地說,我有50個字段,由多達50個下拉列表填充。所有50個可能或可能不需要填充。實體框架 - 通過屬性更新

爲了解決這個問題,我有一箇中繼器,最多可創建50個DDL。用戶將選擇每個值,然後按更新按鈕。我正在循環中繼器中的項目,並可以保持中繼器中正在進行的迭代計數。我也想用這個數字來知道我需要更新的字段。例如DDL1 = FIELD1,DDL2 = FIELD2,....)。

這裏是什麼,我試圖做一個例子:

using (Data.Entities dataContext = new Data.Entities) 
{ 
    var efObject = dataContext.EFData.Where(c => c.ID = [SOMEID]).First(); 

    int posCount = 0; 
    foreach (RepeaterItem rep1 in repeaterControl.Items) 
    { 
     DropDownList ddlControl= (DropDownList)rep1.FindControl("ddlControl"); 

     //Here is where I need to update a field 
     //Something like: efObject.Field# = ddlControl.SelectedValue; 
    } 
} 

有什麼辦法來動態地創建我需要更新的屬性名稱?

是否有一些屬性集合可以通過索引訪問?

這是遠遠接近我應該怎麼做呢?

任何和所有的幫助將不勝感激。謝謝。

回答

10

你可以做這樣的事情。

var properties = typeof(EFType).GetProperties(BindingFlags.Public | BindingFlags.Instance); 
foreach (var property in properties) 
{ 
    var control = (DropDownList)rep1.FindControl("ddlControl" + property.Name); 
    property.SetValue(efObject, control.SelectedValue, null); 
} 

SelectedValue是字符串。所以如果需要的話,你需要注意類型轉換。

+0

完美。這正是我需要的。只需要注意一點,必須爲SetValue方法的第三個參數添加一個空值。 – EthanTowne 2011-06-06 13:22:34

+0

@Horrorshow - 對,確實需要null。 – 2011-06-06 15:19:08