Подтвердить что ты не робот

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

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

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

Спасибо заранее,

Марк

4b9b3361

Ответ 1

Кажется, что украшение вашего поля выглядит следующим образом:

[Column("username")]
public string _username

может быть полезно в вашем случае, в любом случае - просмотрите аналогичный случай