如何配置代码优先实体框架多对多映射表

本文关键字:框架 实体 映射 何配置 配置 代码 | 更新日期: 2023-09-27 18:18:04

从我在网上和编程实体框架CodeFirst书中看到的例子来看,当你在两个类上都有一个集合时,EF将创建一个具有两个主键的映射表。但是我如何向这个表添加一些额外的字段呢?例如,我有以下实体和上下文:

public class User
{
    [Key]
    public Guid Id { get; set; }
    public String Name { get; set; }
    public virtual ICollection<Role> Roles { get; set; }
}
public class Role
{
    [Key]
    public Guid Id { get; set; }
    public String Name { get; set; }
    public virtual ICollection<User> Users { get; set; }
}
class MyContext : DbContext
{
    public MyContext (string connString)
        : base(connString)
    {
    }
    public DbSet<User> Users { get; set; }
    public DbSet<Role> Roles { get; set; }
}

访问此上下文将导致创建具有3个表的数据库:Users, Roles和UserRoles -具有两个Guid字段的多对多映射表。

我想添加一些额外的字段到这个表- DateTime AssignmentDate。如果我添加新的实体

public class UserRoles
{
    [Key]
    public Guid User_Id { get; set; }
    [Key]
    public Guid Role_Id { get; set; }
    public DateTime AssignmentDate { get; set; }
}
class MyContext : DbContext
{
    public MyContext (string connString)
        : base(connString)
    {
    }
    public DbSet<User> Users { get; set; }
    public DbSet<Role> Roles { get; set; }
    public DbSet<UserRoles> UserRoles { get; set; }
}

结果是在数据库中增加了一个表。但我想修改自动创建的表。我该怎么做呢?

如何配置代码优先实体框架多对多映射表

您必须使用单独的类UserRoles,但在您的UserRole类中更改关系以使用IList<UserRole>而不是直接引用彼此

你不能配置默认的多对多表,因为它总是自动生成只有两个主键列。