如何配置代码优先实体框架多对多映射表
本文关键字:框架 实体 映射 何配置 配置 代码 | 更新日期: 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
,但在您的User
和Role
类中更改关系以使用IList<UserRole>
而不是直接引用彼此
你不能配置默认的多对多表,因为它总是自动生成只有两个主键列。