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

时间:2011-05-16 10:32:41

标签: 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;
    }
}

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

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

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

提前致谢,

标记

1 个答案:

答案 0 :(得分:0)

你的领域的装饰似乎是这样的:

[Column("username")]
public string _username
无论如何,

可能对您的情况有所帮助 - 请查看similar case