EF4 код первого беглого отображения не работает с унаследованными свойствами? - PullRequest
1 голос
/ 17 ноября 2011

Кто-нибудь когда-нибудь пробовал составлять карту унаследованного свойства? Потому что я был бы рад услышать, что это просто работает и что я где-то совершаю ошибку, так как получаю следующую ошибку:

"Свойство« Имя пользователя »не является объявленным свойством типа« Рекламодатель ». Убедитесь, что свойство не было явно исключено из модели, используя метод Ignore или аннотацию данных NotMappedAttribute. Убедитесь, что это допустимый примитив. собственность. "

Моя модель выглядит так:

abstract class Entity { public int Id {get; set; }}
abstract class User : Entity { public string UserName {get; set;} }
sealed class Advertiser : User { }

Мой класс AdvertisingConfiguration выглядит следующим образом:

class AdvertiserConfiguration : EntityTypeConfiguration<Advertiser>
{
   public AdvertiserConfiguration()
   {
      // the following line indirectly causes an InvalidOperationException:
      Property( x => x.UserName ).HasMaxLength(50);
   }
}

Если я изменю класс Advertiser, чтобы он не наследовался от User (и перетянул свойство UserName вниз), тогда все работало бы просто отлично.

1 Ответ

9 голосов
/ 17 ноября 2011

Вы можете (и в этом случае должны) определить отображение для абстрактного типа:

class UserConfiguration : EntityTypeConfiguration<User>
{
    public UserConfiguration()
    {
        Property( x => x.UserName ).HasMaxLength(50);
    }
}

И затем, конечно, добавьте его в конфигурации сборщика моделей:

modelBuilder.Configurations.Add(new UserConfiguration());

User является сущностью - абстрактной, но все же сущностью со всеми параметрами отображения.

...