0

从我在网上和编程实体框架 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 个表的数据库:用户、角色和用户角色 - 具有两个 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; }
}

结果是数据库中多了一张表。但我想修改自动创建的表。我怎样才能做到这一点?

谢谢。

4

1 回答 1

0

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

您无法配置默认的多对多表,因为它始终只使用两个主键列自动生成。

于 2013-06-13T07:53:07.157 回答