使用复合主键在DbSet中查找元素

jac*_*les 22 c# asp.net-mvc

我有以下模型,我试图找到一个特定的对象DbSet:

public class UserSkill
{
    [Key, Column(Order = 1)]
    public int UserId { get; set; }

    [Key, Column(Order = 2)]
    [ForeignKey("Skill")]
    public int SkillId { get; set; }

    public virtual Skill Skill { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我试图找到一个特定的以下两种方式UserSkill对象(我传递DbSetUserSkills通过ViewBag):

ViewBag.UserSkills.Find(new { WebSecurity.CurrentUserId, item.SkillId })
ViewBag.UserSkills.Find(new UserSkill(WebSecurity.CurrentUserId, item.SkillId))
Run Code Online (Sandbox Code Playgroud)

但在这两种情况下,我都会收到错误:

传递的主键值的数量必须与实体上定义的主键值的数量相匹配.

我错过了什么?在我看来,主键由两列组成,我正在为find函数提供构成主键的两个值.

Ham*_*yan 41

Find方法的签名是TEntity Find(params Object[] keyValues),您可以按正确的顺序登记复合主键的键.

ViewBag.UserSkills.Find(WebSecurity.CurrentUserId, item.SkillId )
Run Code Online (Sandbox Code Playgroud)


小智 7

要按复合键查找实体,您应该使用此重载

ViewBag.UserSkills.Find(WebSecurity.CurrentUserId, item.SkillId);
Run Code Online (Sandbox Code Playgroud)

MSDN