1

课程:

public class Action
{
    public long ID{ get; set; }
    public string Name{ get; set; }

    public virtual ICollection<User> Users{ get; set; }
}


public class User
{
    public long ID{ get; set; }
    public string Name{ get; set; }

    public virtual ICollection<Action> Actions{ get; set; }
}

表:

Actions 
| ID | Name |

Users  
|ID | Name |

ActionUsers 
| Action_ID | User_ID |

注意ActionUser具有多对多的关系。

假设 EF 可以成功映射上面的示例(我简化了我的原始代码),那么我决定执行以下操作:

  • 将表重命名ActionUsersPermissions
  • Action将班级成员重命名UsersPermittedUsers
  • User将班级成员重命名ActionsPermissions

我将如何告诉 EFPermissions用作关系表而不是ActionUsers在映射时使用User.Permissionsand Action.PermittedUsers?我可以在不使用 Fluent API 的情况下实现所需的配置吗?

4

1 回答 1

2

使用流畅的 API:

public class Action
{
    public long ID{ get; set; }
    public string Name{ get; set; }

    public virtual ICollection<User> PermittedUsers{ get; set; }
}


public class User
{
    public long ID{ get; set; }
    public string Name{ get; set; }

    public virtual ICollection<Action> Permissions{ get; set; }
}

您可以简单地覆盖OnModelCreating方法:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
  {
    modelBuilder.Entity<Action>().
      HasMany(c => c.PermittedUsers).
      WithMany(p => p.Permissions).
      Map(
       m =>
       {
         m.MapLeftKey("Action_ID");
         m.MapRightKey("User_ID");
         m.ToTable("Permissions");
       });
  }

如果您想拥有自己的命名约定,可以将PermissionTable 定义为一个类:

public class Permissions
{

    [ForeignKey("Action")]
    public int Action_ID { get; set; }
    public Action Action { get; set; }


    [ForeignKey("User")]
    public int User_ID { get; set; }
    public User User { get; set; }
}

// context
public class MyContext : DbContext
{
    public DbSet<Action> Actions { get; set; }
    public DbSet<User> Users { get; set; }
    public DbSet<Permissions> Permissions { get; set; }
}
于 2013-09-09T06:23:07.810 回答