在 EF Core 中创建多对多关系时,可以使用 Fluent API 指定中间表,然后通过手动创建该中间表来添加额外字段。
以下是一个示例,使用 Fluent API 指定多对多关系的中间表并添加额外的字段:
```
// 定义中间表实体
public class UserPermission
{
public int UserId { get; set; }
public User User { get; set; }
public int PermissionId { get; set; }
public Permission Permission { get; set; }
public DateTime CreatedTime { get; set; }
// 添加额外字段
public string Source { get; set; }
}
// 定义 User 和 Permission 实体
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<UserPermission> UserPermissions { get; set; }
}
public class Permission
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<UserPermission> UserPermissions { get; set; }
}
// 使用 Fluent API 指定中间表
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<UserPermission>()
.HasKey(up => new { up.UserId, up.PermissionId });
modelBuilder.Entity<UserPermission>()
.HasOne(up => up.User)
.WithMany(u => u.UserPermissions)
.HasForeignKey(up => up.UserId);
modelBuilder.Entity<UserPermission>()
.HasOne(up => up.Permission)
.WithMany(p => p.UserPermissions)
.HasForeignKey(up => up.PermissionId);
// 添加额外字段
modelBuilder.Entity<UserPermission>()
.Property(up => up.Source)
.HasMaxLength(30);
}
```
这里创建了一个 `UserPermission` 实体来表示多对多关系中间表,并添加了一个名为 `Source` 的额外字段。使用 Fluent API `HasOne` 和 `WithMany` 方法指定多对多关系的两个实体,然后指定中间表的主键和外键。最后,使用 `Property` 方法来为 `Source` 字段添加长度限制。
在程序中使用时,通过 EF Core ORM 操作 `UserPermission` 实体来操作多对多关系,并访问额外字段。
想要给中间表添加额外字段,就必须创建中间实体类!并配置对应关系