2014-04-26 16 views
14

tôi có mô hình sau đây và đang cố gắng tìm một đối tượng cụ thể trong một DbSet:Tìm một phần tử trong một DbSet với một hỗn hợp chính chủ chốt

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; } 
} 

Tôi đã thử hai cách sau đây của việc tìm kiếm một số UserSkill đối tượng (tôi đang đi qua các DbSet của UserSkills qua ViewBag):

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

Nhưng trong cả hai trường hợp, tôi nhận được một lỗi:

The number of primary key values passed must match number of primary key values defined on the entity.

Tôi đang thiếu gì? Dường như với tôi rằng khóa chính bao gồm hai cột và tôi đang cung cấp hàm tìm kiếm với hai giá trị bao gồm khóa chính.

Trả lời

27

Chữ ký của phương thức FindTEntity Find(params Object[] keyValues) và bạn có thể tranh thủ các khóa của khóa chính kết hợp theo thứ tự thích hợp.

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

Để tìm một tổ chức bởi chính tổng hợp bạn nên sử dụng quá tải này

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

Msdn

-1

số cột theo thứ tự được zero-based. Thay đổi thành 0 và 1 thay vì 1 và 2. ví dụ:

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

[Key, Column(Order = 1)] 
[ForeignKey("Skill")] 
public int SkillId { get; set; } 
Các vấn đề liên quan