Отображение имени поля, начинающегося с подчеркивания, в Entity Framework 4.1 Code First

У меня есть класс, содержащий несколько частных / защищенных полей и несколько общедоступных методов получения, которые возвращают значения полей. Я пытаюсь сопоставить поля со столбцами базы данных, используя свободный API на DbModelBinder в OnModelCreating. Я не могу использовать автоматическое свойство с защищенным сеттером, поэтому, пожалуйста, не предлагайте это как решение моего вопроса. Наверное, сработает я ' Я уверен, но я не могу использовать автоматическое свойство, поскольку класс домена является общим кодом и используется с другими разными 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 и защищенное поле имени пользователя. Я' Я действительно хотел бы по-прежнему использовать верблюжий регистр подчеркивания без буквенного префикса.

Можно ли каким-либо образом настроить ModelBinder, чтобы при проверке имя свойства принималось с начальным подчеркиванием?

Заранее спасибо,

] Mark

13
задан Mark 16 May 2011 в 10:32
поделиться