c# - 无法制作复合键?我哪里错了?
问题描述
我试图建立多对多的关系。一个客户需要能够拥有许多管理部门,而一个管理部门应该能够拥有许多客户。我的问题:在 microsoft management studio 中,ClientId 以某种方式设置为链接表中的主键。我究竟做错了什么?
我有以下3个模型:
public class Client : IUser
{
[Key, ForeignKey(nameof(User)), DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Id { get; set; }
public User User { get; set; }
public IList<ClientAdministration> ClientAdministrations { get; set;}
}
public class Administration
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
public string Name { get; set; }
public IList<ClientAdministration> ClientAdministrations { get; set;}
}
public class ClientAdministration
{
[key, Column(Order = 0)]
public int ClientId { get; set; }
public Client Client { get; set; }
[key, Column(Order = 1)]
public int AdministrationId { get; set; }
public Administration Administration { get; set; }
}
在我的 Context.cs 中定义了以下关系:
modelBuilder.Entity<ClientAdministration>()
.HasKey(ca => new { ca.ClientId, ca.AdministrationId });
modelBuilder.Entity<ClientAdministration>()
.HasOne<Client>(ca => ca.Client)
.WithMany(c => c.ClientAdministrations)
.HasForeignKey(ca => ca.ClientId);
modelBuilder.Entity<ClientAdministration>()
.HasOne<Administration>(ca => ca.Administration)
.WithMany(a => a.ClientAdministrations)
.HasForeignKey(ca => ca.AdministrationId);
解决方案
据此, Key 属性定义了主键。
在链接表中,两个键都是外键,而不是主键。
推荐阅读
- sql - sql查询中函数的执行顺序是什么?
- javascript - jQuery自动完成:按向上箭头键未定义的值
- html - HTML href 路径奇怪的行为
- python - 从 HTML 中的 Javascript 中提取变量
- momentjs - Momentjs 总是用 isAfter 返回 false
- jakarta-ee - Spring @Profile 的 EJB 对应物
- reactjs - react-navigation 用于将本机发送到错误的屏幕
- css - CSS网格,行高动态
- ibm-cloud - 在 Windows 10 上安装 IBM Cloud CLI 时遇到问题
- java - 注释 @DateTimeFormat 不适用于 Spring boot 和 Thymeleaf