EF6 Code第一种方法中POCO实体的默认构造函数

时间:2016-06-19 09:13:26

标签: c# asp.net asp.net-mvc entity-framework ef-code-first

我是EF的新人。 我正在使用EF6 Code First方法制作应用程序,我已经使我的所有POCO实体派生自定义Id的基类。 我不知道的是如何为处理多对多关系的实体声明构造函数。 例如:

我有这个实体:

 public partial class ArqAppRole
    {
        [Key]
        [Column(Order = 0)]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int ApplicationId { get; set; }

        [Key]
        [Column(Order = 1)]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int RoleId { get; set; }

        public DateTime SinceDate { get; set; }

        public DateTime? UntilDate { get; set; }

        public bool IsActive { get; set; }

        public virtual ArqApplication ArqApplication { get; set; }

        public virtual ArqRole ArqRole { get; set; }
    }

这是由EF自动生成的,我想要的是将它的超类设置为BaseEntity类,它具有默认构造函数,用于设置Id,我不知道如何处理ArqApplication和ArqRole属性及其propper Ids

我的基类是:

public abstract class BaseEntity
    {
        private object _id;

        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public object Id
        {
            get
            {
                return _id;
            }
            protected set
            {
                _id = value;
            }
        }

        protected BaseEntity() : this(null) { }

        protected BaseEntity(object id)
        {
            _id = id;
        }
}

1 个答案:

答案 0 :(得分:1)

您可以将Id保留在基类上,在此用例中,您必须使用Fluent API配置一对一的releshinship。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
  modelBuilder.Entity<ArqAppRole>()
              .HasRequired(s => s.Application) 
              .WithRequiredPrincipal(ad => ad.ArqAppRole); 
} 

Fluent API将首先覆盖您的代码。但是将Id放在基类中是一种不好的做法,你必须到处寻找技巧。只需使用传统方法并使用应该使用的EF。

更多信息:Code first self referencing foreign key (more than one)