EF Code First CTP5. Как хранить унаследованные данные из базового класса - PullRequest
0 голосов
/ 25 марта 2011

У меня есть класс User, который содержит некоторые данные по умолчанию.

   public class User : BaseEntity
    {
        //-- Declaration
        private string _firstname;
        private string _lastname;
        private ICollection<BaseProfile> _profiles = new List<BaseProfile>();

        //-- Constructor
        public User() { }

        //-- Properties
        public string Firstname
        {
            get { return _firstname; }
            set { _firstname = value; base.Name = string.Format("{0} {1}", this.Firstname, this.Lastname); }
        }
        public string Lastname
        {
            get { return _lastname; }
            set { _lastname = value; base.Name = string.Format("{0} {1}", this.Firstname, this.Lastname); }
        }
        public EMailAddress EmailAddress { get; set; }
        public SocialSecurityNumber SocialSecurityNumber { get; set; }
        public Password Password { get; set; }
        public virtual ICollection<BaseProfile> Profiles { get { return _profiles; } set{_profiles = value; }}
    }

Профили содержат данные различных профилей, основанные на различных профилях, которые может иметь пользователь. Если пользователь является игроком, то Profiles будет содержать класс ProfilePlayer, если пользователь будет тренером, он будет содержать класс ProfileTrainer. И если пользователь является игроком и тренером, он будет содержать 2 профиля, один класс ProfilePlayer и один класс ProfileTrainer. Классы этого профиля будут содержать информацию, указанную для различных профилей, которыми может быть пользователь.

Теперь, на мой вопрос, как я могу сказать EF, что он должен сохранять разные BaseProfiles как указанные типы, потому что, когда EF создает для меня базы данных, он создается как BaseProfiles, даже если «реальным» типом является ProfilePlayer. учебный класс. Нужно ли вручную создавать разные таблицы и затем выполнять некоторые сопоставления, или есть простой способ сообщить EF создать разные профильные классы и сохранить данные базовых профилей в правильную таблицу?

1 Ответ

0 голосов
/ 27 марта 2011

Я нашел решение своей проблемы.

    modelBuilder.Entity<Domain.BaseProfile>()
        .Map<Domain.Model.ProfilePlayer>(p => p.Requires("Discriminator").HasValue("ProfilePlayer"))
        .Map<Domain.Model.ProfileTrainer>(p => p.Requires("Discriminator").HasValue("ProfileTrainer"));
...