Подтвердить что ты не робот

Поиск элемента в DbSet с составным первичным ключом

У меня есть следующая модель и я пытаюсь найти конкретный объект в 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; }
}

Я пробовал следующие два способа найти определенный объект UserSkill (я передаю DbSet из UserSkills через ViewBag):

ViewBag.UserSkills.Find(new { WebSecurity.CurrentUserId, item.SkillId })
ViewBag.UserSkills.Find(new UserSkill(WebSecurity.CurrentUserId, item.SkillId))

Но в обоих случаях я получаю сообщение об ошибке:

Количество переданных значений первичного ключа должно соответствовать количеству значений первичного ключа, определенных на объекте.

Что мне не хватает? Мне кажется, что первичный ключ состоит из двух столбцов, и я предоставляю функцию find двумя значениями, которые содержат первичный ключ.

4b9b3361

Ответ 1

Подпись метода Find составляет TEntity Find(params Object[] keyValues), и вы можете заручиться ключами составного первичного ключа в правильном порядке.

ViewBag.UserSkills.Find(WebSecurity.CurrentUserId, item.SkillId )

Ответ 2

Чтобы найти объект с помощью составного ключа, вы должны использовать эту перегрузку

ViewBag.UserSkills.Find(WebSecurity.CurrentUserId, item.SkillId);

Msdn

Ответ 3

Номера столбцов с номерами основаны на нулевом значении. Измените на 0 и 1 вместо 1 и 2. i.e.:

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

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