实体框架映射到查找表

时间:2011-10-31 14:01:49

标签: entity-framework entity-framework-4 mapping inner-join lookup

我有3个表需要使用Entity Framework进行映射,我不确定正确的方法。这是我的3个实体:

public class User
{
   [Key] 
   public int user_id {get; set;}
   public string user_name {get; set;}

   public virtual List<Role> roles {get; set;}
}

public class Role
{
   [Key] 
   public int role_id {get; set;}

   public string role_name {get; set;}
}

public class User_Role
{
   [Key] 
   public int user_role_id {get; set;}

   public int user_id {get; set;}
   public int role_id {get; set;}
}

请注意,User_Role实体只代表一个查找表,用于将多个角色链接到单个用户。

使用SQL我会做类似的事情:

SELECT User.user_name, Role.role_name FROM User INNER JOIN User_Role ON User_Role.user_id = User.user_id INNER JOIN Role ON Role.role_id = User_Role.role_id WHERE User.user_id = 123

我对Entity Framework相对较新,所以我不确定使用EF4 DbContext(以及可能的Fluent API)解决这个问题的最佳方法,但我希望它很直接。

提前致谢。

1 个答案:

答案 0 :(得分:5)

事实证明我需要使用Fluent API映射多个表(User_Role)。

     modelBuilder.Entity<Role>()
        .HasMany<User>(u => u.users)
        .WithMany(r => r.roles)
        .Map(m => 
           m.MapLeftKey("role_id")
           m.MapRightKey("user_id")
           m.ToTable("User_Role"));