[英]Get field by name in Entity Framework
对于我来说,从通过实体框架生成的实体获取属性(进行读取和修改)的最简单,最省力的工作是什么?
下面的示例(和简化的代码):
// <auto-generated> from Entity Framework
public partial class tblCustomer
{
public int CustomerID { get; set; }
public string Status { get; set; }
}
例如,我想要:
tblCustomer customer = new tblCustomer();
int pCustomerID = customer.GetFieldByName("CustomerID");
pCustomerID = 100;
我已经阅读了很多有关Reflection的答案,但也评论说这很繁琐(可能对我的需求而言有点过分了)。
我的示例代码可能看起来很简单(因此,解决方案将毫无意义,实际代码是基于大型表的),但是如果有某种GetFieldByName函数,我可以大大减少代码,因为我有很多重复代码做同样的事情(只是针对不同的列)。
如果我正确理解了您的问题,我认为您可以为此使用changetracker(如果实体已经在上下文中)。
dbContext.Entry(customer).CurrentValues["CustomerID"]
将为您提供customer
对象的CustomerID
值,前提是该对象附加到dbContext
实例。
如果它不是上下文的一部分,则可以使用Attach()
首先将其附加,如果应该是新记录,则可以使用Add()
。
如果您不喜欢使用反射,那么我所知道的唯一方法就是在您的实体中使用字典,并且您也可以将所有这些内容放入基类中,然后您的实体就可以像这样继承它:
[Serializable]
public class BaseEntity
{
Dictionary<string, object> _dic;
public BaseEntity()
{
_dic = new Dictionary<string, object>();
}
public object this[string propertyName]
{
get
{
return _dic[propertyName];
}
set
{
_dic[propertyName] = value;
}
}
}
public class tblCustomer : BaseEntity
{
public int CustomerID
{
get
{
return (int)this["CustomerID"];
}
set
{
this["CustomerID"] = value;
}
}
public string Status
{
get
{
return (string)this["Status"];
}
set
{
this["Status"] = value;
}
}
}
tblCustomer客户=新的tblCustomer(); int pCustomerID = customer [“ CustomerID”];
以及关于Reflection的性能成本,您可以第一次将memberInfos存储在静态字段中,并将其用于所有实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.