我已经看过其他问题和解决方案,看来我做的一切都是正确的,至少在理论上是这样。但是当我试图在我的一个类对象上找到一个对象时,我得到“与实体中的键数不同的键值传递的数量”。
以下是我的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[]
放入其中并且有效。
答案 0 :(得分:0)
Find
具有签名Find(params object[] keys)
,这确实意味着您可以将对象数组传递给方法Find(new object[] { server, port, hashPassword })
- 正如您已经找到的那样。但是params
关键字允许更简单的语法将每个数组元素作为单独的参数传递:
...Find(server, port, hashPassword)