我需要在OnModelCreating(DbModelBuilder模型构建器)函数中添加什么来定义Person和Role之间的关系?

eCo*_*rke 15 c# entity-framework dbcontext entity-framework-5

我在WinForms项目中使用EntityFramework 5.0版,.net 4.5.

我为我创建了2个重要的实体

    public class Role
    {
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        public string Name { get; set; }
        public bool StockPermission { get; set; }
        public bool ItemPermission { get; set; }
        public bool OrderPermission { get; set; }
        public bool PersonPermission { get; set; }
        public bool StatisticPermission { get; set; }
    }

    public class Person
    {
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        public String Name { get; set; }
        public String Nickname { get; set; }
        public String Contact { get; set; }
        public System.DateTime Created { get; set; }
        public String Pincode { get; set; }

        public virtual ICollection<Role> Role { get; set; }
        public virtual Person Creator { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

和dbContext类:

    public class SusibarDbContext : DbContext
    {
        public DbSet<Entity.Role> Roles { get; set; }
        public DbSet<Entity.Person> Persons { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            //base.OnModelCreating(modelBuilder);
        }
    }
Run Code Online (Sandbox Code Playgroud)

拜托,你能帮我解决一下我需要添加到OnModelCreating(DbModelBuilder modelBuilder)功能中来定义人与角色之间的关系吗?

人可以有很多角色(但不能为空),不同的人可以有相同的角色.

人可以有一个"创造者"人(可以为空),不同的人可以拥有相同的"创造者"

如果你可以这么善良,请告诉我解决方案:-(

kla*_*sor 16

如果您想使用Fluent API,请从MSDN 查看此主题.您应该使用多对多关系,EF将创建一个表所需的表,当Person可以有多个角色和角色有很多人时.像这样的东西:

modelBuilder.Entity<Person>().HasMany(x => x.Roles).WithMany();
Run Code Online (Sandbox Code Playgroud)

您也可以在不使用Fluent API的情况下创建此关系.您应该ICollection<Person> Persons在Role类中创建导航属性,EF也将创建适当的表和关系.