EF Code First CTP5。如何存储基类的继承数据

时间:2011-03-25 19:50:58

标签: entity-framework entity-framework-ctp5

我有一个包含一些默认数据的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数据保存到正确的表中?

1 个答案:

答案 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"));