Ответ 1
Подпись метода Find
составляет TEntity Find(params Object[] keyValues)
, и вы можете заручиться ключами составного первичного ключа в правильном порядке.
ViewBag.UserSkills.Find(WebSecurity.CurrentUserId, item.SkillId )
У меня есть следующая модель и я пытаюсь найти конкретный объект в 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 двумя значениями, которые содержат первичный ключ.
Подпись метода Find
составляет TEntity Find(params Object[] keyValues)
, и вы можете заручиться ключами составного первичного ключа в правильном порядке.
ViewBag.UserSkills.Find(WebSecurity.CurrentUserId, item.SkillId )
Чтобы найти объект с помощью составного ключа, вы должны использовать эту перегрузку
ViewBag.UserSkills.Find(WebSecurity.CurrentUserId, item.SkillId);
Номера столбцов с номерами основаны на нулевом значении. Измените на 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; }