在Entity Framework 4.1 Code First中映射以下划线开头的字段名称

Mar*_*ark 13 entity-framework-4.1

我有一个类包含一些私有/受保护的字段和一些返回字段值的公共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;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果字段名称是m_username但是如果我使用_username我得到一个ModelValidationException:在模型生成期间检测到一个或多个验证错误:System.Data.Edm.EdmProperty:Name:不允许指定的名称:'_ username ".

我不能使用没有下划线的camelcase,因为上面的帮助程序无法区分公共Username属性和受保护的用户名字段.我真的很想继续使用没有字母前缀的下划线camelcase.

是否可以以某种方式配置ModelBinder,以便验证接受带有前导下划线的属性名称?

提前致谢,

标记

And*_*rko 0

看来你的领域的装饰是这样的:

[Column("username")]
public string _username
Run Code Online (Sandbox Code Playgroud)

无论如何,也许对你的情况有帮助 - 请查看类似的情况