我有一个实体(Entity Framework 6),该实体映射到具有100列的表,这些列名为col_1,col_2等。该表是现有的旧表,用于连接到另一个系统,因此它非常通用,并且永远不会更改。
因此,该实体具有100个映射到这些列的属性。
public class DataEntity{
public string Column1{get;set;}
...
}
然后,我得到了这样的数据:
var columnNumber = 1;
var data = "The data";
如何在没有大写字母的情况下将col_1设置为“数据”?
var dataEntity = new DataEntity();
这是我不想做的:
switch(columnNumber)
{
case 1:
dataEntity.Column1 = data;
break;
}
注意,不可能更改实体的结构。
如果您绝对不能更改数据的结构并且不想使用switch语句-我可能会研究策略模式的一些实现:
http://www.dofactory.com/net/strategy-design-pattern
如果您不想走这条路,则可以使用反射通过遵循以下约定来设置实体的值:在该约定中,列将始终被命名为“ col_1”,依此类推,但这非常脆弱。
var myEntity = new MyEntity();
var value = "The data";
var columnNumber = 1;
PropertyInfo propertyInfo = MyEntity.GetType().GetProperty(string.Format("Col_{0}", columnNumber));
propertyInfo.SetValue(myEntity, Convert.ChangeType(value, propertyInfo.PropertyType), null);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句