2011-06-06 137 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