尝试通过将oracle数据库中的字段映射到对象上的属性来创建数据访问组件.我已经创建了一个带有类型的基础对象,并且像这样调用…
public class Document : DataProviderBase<DataObjects.Document>
{
// code goes here...
}
这个基础对象有一个名为AddMapping的方法,它将数据库字段映射到这样的属性……
this.AddMapping<int>("ATD_KEY", "Key")
在这种情况下…
> int是属性的类型
> ATD_KEY是数据库中的字段名称
> Key是DataObjects.Document上的属性名称
代码使用……
typeof(<TParent>).GetProperty(<property name>)
..获取用于获取和设置属性的PropertyInfo.
虽然这很好,但我想在AddMapping方法中添加一些类型为safety和lambda的表达式.我想做以下的事……
this.AddMapping<int>("ATD_KEY", o => o.Key)
..其中o是DataProviderBase提供的类型.这将确保属性Key实际上是int类型,并确保字符串“Key”不是拼写错误或错误的情况,因为第一个AddMapping方法中显示的当前工作代码存在问题.
这可能吗?如果是这样的话?
我发现的最接近的例子就是这个
Dynamic Expression from the Property of the object of the class,但是这仍然是通过字符串而不是表达式引用属性.
最佳答案 您可以使用以下内容:
public void AddMapping<T>(fieldName, Expression<Func<TParent, T>> propExpr)
{
var memberExpr = (MemberExpression)propExpr.Body;
PropertyInfo property = (PropertyInfo)memberExpr.Member;
...
}