复合键 - 传递的键值数量与实体中键的数量不同

时间:2014-03-12 15:43:59

标签: c# asp.net-mvc entity-framework-6

我已经看过其他问题和解决方案,看来我做的一切都是正确的,至少在理论上是这样。但是当我试图在我的一个类对象上找到一个对象时,我得到“与实体中的键数不同的键值传递的数量”。

以下是我的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>();
}

现在,以下代码是我在KCO对象上调用find的方式。

KMDBContext db = new KMDBContext();
KM_Codes_KCO kco = db.KCOs.Find(new { server, port, hashPassword });

当我点击.Find电话时发生错误。所有参数的顺序正确且类型正确。我不得不遗漏一些简单的东西。

编辑 - 答案:

在提出问题后,我有找到问题的诀窍。它应该是db.KCOs.Find(new object[] { server, port, hashPassword }));我将object[]放入其中并且有效。

1 个答案:

答案 0 :(得分:0)

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

...Find(server, port, hashPassword)