C# 复合键-传入的键值数与实体中的键数不同

C# 复合键-传入的键值数与实体中的键数不同,c#,asp.net-mvc,entity-framework-6,C#,Asp.net Mvc,Entity Framework 6,我已经研究了其他问题和解决方案,看起来我做的每件事都是对的,至少在理论上是这样。但当我试图在我的一个类对象上查找一个对象时,我得到的是“传入的键值数,而不是实体中的键值数” 下面是我的DbContext类的一部分: public DbSet<KM_Codes_KCO> KCOs { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.

我已经研究了其他问题和解决方案,看起来我做的每件事都是对的,至少在理论上是这样。但当我试图在我的一个类对象上查找一个对象时,我得到的是“传入的键值数,而不是实体中的键值数”

下面是我的DbContext类的一部分:

public DbSet<KM_Codes_KCO> KCOs { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{

    modelBuilder.Entity<KM_Codes_KCO>().HasKey(k => 
            new { k.KCO_RequestedServer, k.KCO_ServerPort, k.KCO_Code });
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
当我点击
.Find
调用时出错。所有参数的顺序和类型都正确。我必须错过一些简单的东西

编辑-回答:


我有一种在提出问题后发现问题的本领。它应该是
db.KCOs.Find(新对象[]{server,port,hashPassword})
我把
对象[]
放进去,它就工作了。

Find
具有签名
Find(params object[]key)
,这确实意味着您可以将一个对象数组传递到方法
Find(新对象[]{server,port,hashPassword})
-正如您已经找到的那样。但是
params
关键字允许更简单的语法将每个数组元素作为单独的参数传递:

...Find(server, port, hashPassword)
...Find(server, port, hashPassword)