Entity Framework Code First: Как отобразить частные поля? - PullRequest
7 голосов
/ 21 марта 2011

Можно ли сопоставить столбец таблицы с полем класса вместо свойства класса и как?

ВЫ МОЖЕТЕ СДЕЛАТЬ ЭТО:)

Перейдите по этой ссылке: http://weblogs.asp.net/ricardoperes/archive/2013/08/22/mapping-non-public-members-with-entity-framework-code-first.aspx

Это распространенный запрос, и он действительно имеет смысл; нам нужно использовать выражения LINQ и немного магии отражения. Во-первых, вспомогательная функция для возврата выражения, указывающего на член:

      public static class ExpressionHelper
      {
          public static Expression<Func<TEntity, TResult>> GetMember<TEntity, TResult>(String memberName)
          {
              ParameterExpression parameter = Expression.Parameter(typeof(TEntity), "p");
              MemberExpression member = Expression.MakeMemberAccess(parameter, typeof(TEntity).GetMember(memberName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Single());
              Expression<Func<TEntity, TResult>> expression = Expression.Lambda<Func<TEntity, TResult>>(member, parameter);
              return (expression);
          }
     }

Затем мы вызываем его в методе DbContext.OnModelCreating в качестве параметра для StructuralTypeConfiguration.Property:

.
  protected override void OnModelCreating(DbModelBuilder modelBuilder)
  {
      modelBuilder.Entity<Project>().Property(ExpressionHelper.GetMember<Project, Decimal>("Budget")).IsRequired();

      base.OnModelCreating(modelBuilder);
  }

1 Ответ

4 голосов
/ 21 марта 2011

Entity Framework (Code First или нет) не поддерживает сопоставление с полем;только для свойств.

ОБНОВЛЕНИЕ Как указано в комментариях, эти документы немного устарели, но могут помочь любому начинающему:

Entity Framework Code, первая разработка Ресурсы и документация

Ради полноты, вот ссылка на то, что включено в EF 4.1 RC: Доступен кандидат на выпуск EF 4.1

Изменения после CTP5 (по ссылке выше):

  • Переименование базы данных DbDatabase в базу данных.Этот класс также перемещен в пространство имен 'System.Data.Entity' вместе с классами инициализатора базы данных.

  • Переименование 'ModelBuilder' в 'DbModelBuilder', для выравнивания с другими основными классами.

  • Проверка в Model First и Database First. Новая функция проверки была поддержана только в Code First в CTP5.В RC функция проверки будет работать со всеми тремя рабочими процессами разработки (Модель сначала, База данных сначала и Код сначала).

  • Полная документация Intellisense. Функции CTP не былитщательно документированы, потому что поверхность API значительно менялась между каждым выпуском.Этот выпуск включает в себя полную документацию.

  • Удаление первых подключаемых соглашений Code. Подключаемые условные обозначения были предварительно просмотрены в Feature CTP5, но в этом выпуске не были в рабочем состоянии.Этот выпуск по-прежнему поддерживает удаление соглашений по умолчанию.

  • Консолидация IsIndependent в API-интерфейсе Code First.При настройке отношений в Feature CTP5 использовался метод IsIndependent, чтобы определить, что у отношения не было свойства внешнего ключа, выставленного в объектной модели.Теперь это делается путем вызова метода Map.HasForeignKey по-прежнему используется для отношений, где свойство внешнего ключа предоставляется в объектной модели.

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