Первый код EF CTP5. Как сохранить унаследованные данные от baseclas

У меня есть класс 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; }}
    }

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

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


person Magnus Gladh    schedule 25.03.2011    source источник
comment
Используете ли вы наследование для класса профиля?   -  person Steve Mallory    schedule 25.03.2011
comment
Да, мой ProfilePlayer, ProfileTrainer наследуют BaseProfiler.   -  person Magnus Gladh    schedule 26.03.2011


Ответы (1)


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

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