2012-08-22 2 views
0

이 나는 ​​역할, 권한이엔티티 프레임 워크 찾기 법인을 통해 외래 키

.. 이것은 대부분의 빵 & 버터입니다 있으리라 믿고있어, 그리고 RolePermissions 엔티티는 다 대다 관계를 모델링 할 수 있습니다.

public class RolePermission 
{ 
    [Key] 
    public int ID { get; set; } 

    //[Key, ForeignKey("Role"), Column(Order = 0)] 
    public int RoleID { get; set; } 

    //[Key, ForeignKey("Permission"), Column(Order = 1)] 
    public int PermissionID { get; set; } 

    //Navigational Properties 
    public virtual Role role { get; set; } 
    public virtual Permission permission { get; set; } 
} 

내가 전달하는 역할 ID 및 PermissionId에 따라 주어진 RolePermission을 제거하는 ActionResult를 가지고있다.

public ActionResult Remove(int Roleid, int Permissionid) 
{ 
    RolePermission rolepermission = db.RolePermissions 
    .Include(p => p.PermissionID == Permissionid) 
    .SingleOrDefault(p => p.RoleID == Roleid); 

    db.RolePermissions.Remove(rolepermission); 
    db.SaveChanges(); 
    return RedirectToAction("Index"); 
} 

위 RolePermission의 rolepermission .. 문은

The Include path expression must refer to a navigation property defined on the type. Use dotted paths for reference navigation properties and the Select operator for collection navigation properties. 
Parameter name: path 
실패

.. 놀랍지도 않은데, 처음에는 코드 냄새가났다.

무엇 난 후 것은

Delete from RolePermission 
Where RoleID = roleid 
AND PermissionID = permissionid 

모든지도에 해당 무엇입니까? 많은 감사는 RolePermission 방금 ​​조인 테이블의 레코드에 대한 조회 및 삭제 할 수 있어야한다 (many-to-many 관계에 대해 조금 이례적인 일이다) 엔티티로 노출했기 때문에

답변

0

:

public ActionResult Remove(int Roleid, int Permissionid) 
{ 
    RolePermission rolepermission = db.RolePermissions 
     .SingleOrDefault(rp => rp.RoleID == Roleid 
          && rp.PermissionID == Permissionid); 

    if (rolepermission != null) 
    { 
     db.RolePermissions.Remove(rolepermission); 
     db.SaveChanges(); 
    } 
    return RedirectToAction("Index"); 
} 
+0

그게 정확히 내가 한 것입니다. 감사합니다. re : "다 대다 관계에서는 약간 특이합니다." 나는 새로운 프론트 엔드 (코드를 통해) 프로토 타입을 생성하여 궁극적으로 이러한 엔티티가있는 기존 백엔드/데이터 레이어와 다시 연결됩니다. 왜 이것이 올바르지 않은가? 나는 아마도 내 생각을 설명하는 DB 배경에서 왔는데 ... –

+0

@Fetchezlavache : 링크 테이블에 RoleID와 PermissionID로 구성된 복합 기본 키가 있고 그 둘 이외의 추가 열이없는 경우에는 'Permissions'을 직접적으로 수집하는'Role'과'Roles' 엔티티 만 직접적으로 수집하는'Permission'이 있습니다. 모델에'RolePermission'이 필요하지 않습니다. 여기를 참조하십시오 : http://weblogs.asp.net/manavi/archive/2011/05/17/associations-in-ef-4-1-code-first-part-6-many-valued-associations.aspx, 섹션 * 다 대다 협회 *,'Item'과'Category'의 예. – Slauma

관련 문제