我有一个包含一些私有/受保护字段的类和一些返回字段值的公共getter。我正在尝试使用OnModelCreating中的DbModelBinder上的流畅API将字段映射到数据库列。我不能使用带有受保护的setter的自动属性,所以请不要提供这个作为我的问题的解决方案。它可能会工作我肯定但我不能使用自动属性,因为域类是共享代码,并与其他不同的ORM一起使用,这些ORM具有不同的映射字段的方式,不幸的是一个不支持au
我使用以下代码(在stackoverflow上找到)来访问受保护的字段,以便在映射时使用表达式:
public static class ObjectAccessor<T>
where T : class
{
public static Expression<Func<T, TResult>> CreateExpression<TResult>(string propertyOrFieldName)
{
ParameterExpression param = Expression.Parameter(typeof(T), "propertyOrFieldContainer");
Expression body = Expression.PropertyOrField(param, propertyOrFieldName);
LambdaExpression lambda = Expression.Lambda(typeof(Func<T, TResult>), body, param);
return (Expression<Func<T, TResult>>)lambda;
}
}
如果字段名称是m_username但是如果我使用_username我得到一个ModelValidationException:这一切都很有效:在模型生成期间检测到一个或多个验证错误:System.Data.Edm.EdmProperty:Name:不允许指定的名称:'_ username'。
我不能使用没有下划线的camelcase,因为上面的帮助程序无法区分公共Username属性和受保护的用户名字段。我真的很想继续使用没有字母前缀的下划线camelcase。
是否可以以某种方式配置ModelBinder,以便验证接受带有前导下划线的属性名称?
提前致谢,
标记
答案 0 :(得分:0)