2014-07-04 58 views
1

如何將兩個不同表中的外鍵映射到流暢Api中的一個表? 我的兩個模型是一樣具有作爲外鍵上表的主鍵僅在實體框架6中使用外鍵的表(Fluent 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; } 
} 

,三表?

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

如何映射Fluent Api?

回答

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(); 
    } 
} 
+0

一位顧客只能有一個用戶ID,因此應該有一個與客戶和CustomerRole一個關係。 –

+0

你是什麼意思?一個客戶可以擁有多個角色,一個角色可以由多個客戶擁有,這就是您一對一的意思嗎? –

+0

謝謝。我會盡力糾正並回復。是的,一個客戶可以有多個角色,1個角色可以應用於不同的客戶。 –