c# - 如何修改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;}
}
所以我想修改连接表如下:
将唯一约束添加到连接表但由于连接表是由 EF Core 自动生成的,我正在寻找一种方法来将此唯一约束添加到连接表
将其他属性添加到连接表。例如,我需要将 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
使用匿名类型选择器允许创建复合索引:
modelBuilder.Entity<UserBill>()
.HasIndex(p => new { p.UserId, p.BillId})
.IsUnique();
推荐阅读
- c++ - 如何制作产生同一类对象的类
- angular6 - 添加 HttpInterceptor 后,ngx-translate 无法正常工作
- c# - Unity UDP - 不能同时发送和接收?
- rss - Google 新闻 RSS 提要的 URL 格式
- python - Pandas - 使用分隔符分割文本
- php - 在用户登录时连接到不同数据库的情况下,如何将数据库凭据存储在 Config 类中
- c# - 如何返回已在方法内修改的对象?
- google-chrome - 使用 tel 协议 Chrome 链接打开拨号程序
- html - 切换按钮不起作用,而是看起来像使用 css 的常规复选框
- python-3.x - 比较列并替换现有列中的结果