微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何修改EF Core 5中多对多实体关系中生成的连接表

如何解决如何修改EF Core 5中多对多实体关系中生成的连接表

在我的应用程序中,两个实体 - Bill 和 User 之间存在多对多关系。这样一个用户可以有很多账单,一个账单可以适用于很多用户

User{
  public string Id{get; set;}
  public ICollection<Bill> Bills {get; set;}
}

Bill{
  public int Id{get; set;}
  public ICollection<User> Users {get; set;}
}

使用 EF Core 5,我了解到我应该能够忽略 UserBill 的连接表,其中包含两个实体的 ID 和每个其他实体的导航属性。但是,我希望确保给定用户不会发生两次账单。

UserBill{
  public string UserId{get; set;}
  public User Payer{get; set;}

  public int BillId{get; set;}
  public Bill Bill {get; set;}
}

所以我想修改连接表如下:

  1. 向连接表添加唯一约束,但由于连接表是由 EF Core 自动生成的,我正在寻找一种方法将此唯一约束添加到连接表

  2. 向连接表添加其他属性。例如,我需要在连接表中添加 PaymentStatus 以指示是否已支付帐单以及其他必要的属性

    UserBill{
    public int Id {get; set;}
    
    public string UserId{get; set;}
    public User Payer{get; set;}
    
    public int BillId{get; set;}
    public Bill Bill {get; set;}
    public PaymentStatus Status {get; set;}
    }
    

这里我现在需要添加唯一约束以确保不能多次出现

用户 ID、账单 ID

我们将不胜感激。 谢谢。

解决方法

带有匿名类型选择器的

HasIndex 允许创建一个 composite index

modelBuilder.Entity<UserBill>()
    .HasIndex(p => new { p.UserId,p.BillId})
    .IsUnique();
,

替代方法是使用 HasKey 并从 UserBill 中删除 Id

modelBuilder.Entity<UserBill>()
            .HasKey(p => new {p.UserId,p.BillId});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。