2012-08-22 55 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; } 
} 

我有在傳遞一個ActionResult刪除一個給定的RolePermission的基礎上,角色ID和PermissionId。

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 

任何指導的相同呢? 非常感謝

回答

0

既然你已經在RolePermission暴露作爲一個實體(這是一個有點不尋常的許多一對多的關係),你應該能夠只是查詢記錄在連接表並將其刪除:

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:「這對於多對多的關係來說有點不尋常」。我正在創建一個新的前端(通過代碼優先)原型,最終重新搭建一個具有這些實體的現有後端/數據層。爲什麼這不被視爲正確? 我來自一個數據庫背景,這可能解釋了我的想法... –

+0

@Fetchezlavache:如果你的鏈接表有一個組合主鍵組成的'RoleID'和'PermissionID',除了那兩個沒有額外的列,你可以使用「角色」(直接收集「權限」)和「權限」(直接收集「角色」)實體。你的模型中不需要'RolePermission'。請參閱此處:http://weblogs.asp.net/manavi/archive/2011/05/17/associations-in-ef-4-1-code-first-part-6-many-valued-associations.aspx,section *多對多關聯*,「Item」和「Category」的例子。 – Slauma