首页 文章

仅在实体框架6中使用外键的表(Fluent Api)

提问于
浏览
1

如何用流畅的Api将外键从两个不同的表映射到一个表?我的两个模型就像

public class Customer
{
    [Key]
    public string Userid { get; set; }

    public string PassWord { get; set; }

    public bool premium { get; set; }
}


public class Roles
{
    [Key]
    public string Name { get; set; }

    public string Description { get; set; }
}

并且具有上表的主键作为外键的第3表?

public class CustomerRoles
{
   public string RoleName { get; set; }
   public string UserId { get; set; }
}

如何映射Fluent Api?

1 回答

  • 2
    public class Customer
    {
        [Key]
        public string Userid { get; set; }
        public string PassWord { get; set; }
        public bool premium { get; set; }
        public ICollection<CustomerRole> CustomerRoles { get; set; }
    }
    public class Role
    {
        [Key]
        public string Name { get; set; }
        public string Description { get; set; }
        public ICollection<CustomerRole> CustomerRoles { get; set; }
    }
    public class CustomerRole
    {
        public string RoleName { get; set; }
        public string UserId { get; set; }
        public Role Role { get; set; }
        public Customer Customer { get; set; }
    }
    public class AppContext : DbContext
    {
        public DbSet<Customer> Customers { get; set; }
        public DbSet<Role> Roles { get; set; }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
    
            modelBuilder.Entity<Customer>().HasMany(c => c.CustomerRoles).WithRequired(cr => cr.Customer);
            modelBuilder.Entity<Role>().HasMany(r => r.CustomerRoles).WithRequired(cr => cr.Role);
            modelBuilder.Entity<CustomerRole>().HasKey(cr => new { cr.RoleName, cr.UserId });
        }
    }
    

    PS:类名不应该是复数,它可能与数组属性混淆 .

    更新如何使用它

    static void Main(string[] args)
    {
        using (var ctx = new AppContext())
        {
            Customer customer = new Customer { Userid = "A" };
            ctx.Customers.Add(customer);
    
            Role role1 = new Role { Name = "Role1" };
            ctx.Roles.Add(role1);
            Role role2 = new Role { Name = "Role2" };
            ctx.Roles.Add(role2);
    
            customer.CustomerRoles = new[]
            {
                new CustomerRole { Customer = customer, Role = role1 },
                new CustomerRole { Customer = customer, Role = role2 },
            };
    
            ctx.SaveChanges();
        }
    }
    

相关问题