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