C# Can';你不能做复合键吗?我哪里做错了?

C# Can';你不能做复合键吗?我哪里做错了?,c#,entity-framework,C#,Entity Framework,我想建立一种多对多的关系。一个客户需要能够有多个管理,一个管理应该能够有多个客户。我的问题是:在MicrosoftManagementStudio中,ClientId被设置为链接表中的主键。我做错了什么 我有以下3种型号: public class Client : IUser { [Key, ForeignKey(nameof(User)), DatabaseGenerated(DatabaseGeneratedOption.None)] public int Id { get

我想建立一种多对多的关系。一个客户需要能够有多个管理,一个管理应该能够有多个客户。我的问题是:在MicrosoftManagementStudio中,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; }
}
公共类客户端:IUser
{
[Key,ForeignKey(nameof(User)),DatabaseGeneratedOption(DatabaseGeneratedOption.None)]
公共int Id{get;set;}
公共用户{get;set;}
公共IList客户端管理{get;set;}
}
公共班级管理
{
[数据库生成(DatabaseGeneratedOption.Identity)]
公共int Id{get;set;}
[必需]
公共字符串名称{get;set;}
公共IList客户端管理{get;set;}
}
公共类客户管理
{
[键,列(顺序=0)]
public int ClientId{get;set;}
公共客户端{get;set;}
[键,列(顺序=1)]
公共int管理ID{get;set;}
公共行政管理{get;set;}
}
在我的上下文中,C.S定义了以下关系:

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);
modelBuilder.Entity()
.HasKey(ca=>new{ca.ClientId,ca.AdministrationId});
modelBuilder.Entity()
.HasOne(ca=>ca.Client)
.WithMany(c=>c.ClientAdministration)
.HasForeignKey(ca=>ca.ClientId);
modelBuilder.Entity()
.HasOne(ca=>ca.Administration)
.WithMany(a=>a.ClientAdministration)
.HasForeignKey(ca=>ca.AdministrationId);
根据,Key属性定义主键


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

ClientAdministration表是否有其他列?或者只有两个键列?@jcruz不,只有两个键列:)在这种情况下,您可以从C#代码中同时省略连接表,并使用fluent API配置进行此M2M映射。请参阅文章中的“使用Fluent API配置多对多关系”一节: