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

У меня есть класс, который содержит несколько закрытых / защищенных полей и несколько открытых методов получения, которые возвращают значение полей.Я пытаюсь сопоставить поля со столбцами базы данных, используя свободный API на DbModelBinder в OnModelCreating.Я не могу использовать автоматическое свойство с защищенным установщиком, поэтому, пожалуйста, не предлагайте это как решение моего вопроса.Я уверен, что это сработает, но я не могу использовать свойство Automatic, поскольку класс домена является общим кодом и используется с другими различными ORM, которые имеют разные способы отображения своих полей, и, к сожалению, один из них не поддерживает au

* 1002.* Я использую следующий код (найденный в 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, чтобы проверка принимала имя свойства с начальным подчеркиванием?

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

Марк

1 Ответ

0 голосов
/ 01 июня 2012

Похоже, что украшение вашего поля так:

[Column("username")]
public string _username

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...