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