如何解决如何修改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;}
}
所以我想修改连接表如下:
-
向连接表添加其他属性。例如,我需要在连接表中添加 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 举报,一经查实,本站将立刻删除。