У меня есть класс 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 создать разные классы профилей и сохранить данные базовых профилей в правильную таблицу?