首页 > 解决方案 > 无法制作复合键?我哪里错了?

问题描述

我试图建立多对多的关系。一个客户需要能够拥有许多管理部门,而一个管理部门应该能够拥有许多客户。我的问题:在 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);

标签: c#entity-framework

解决方案


据此 Key 属性定义了主键。

在链接表中,两个键都是外键,而不是主键。


推荐阅读