我有一个包含一些默认数据的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 clas,如果用户是Trainer,则它将包含ProfileTrainer类。如果用户是播放器和培训师,它将包含2个配置文件,一个ProfilePlayer类和一个ProfileTrainer类。此配置文件类将包含为用户可能的不同配置文件指定的信息。
现在我的问题是,如何告诉EF它应该将不同的BaseProfiles保存为指定类型,因为当EF为我创建数据库时,即使“真实”类型是ProfilePlayer,它也会被创建为BaseProfiles类。我是否需要手动创建不同的表,然后进行一些映射,或者是否有一种简单的方法告诉EF创建不同的profilesclasses并将baseprofiles数据保存到正确的表中?
答案 0 :(得分:0)
我确实找到了解决问题的方法。
modelBuilder.Entity<Domain.BaseProfile>()
.Map<Domain.Model.ProfilePlayer>(p => p.Requires("Discriminator").HasValue("ProfilePlayer"))
.Map<Domain.Model.ProfileTrainer>(p => p.Requires("Discriminator").HasValue("ProfileTrainer"));