0

これはほとんどの人にとってパンとバターだと思います..

多対多の関係をモデル化するための Roles、Permissions、および 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; }
}

渡された RoleID と 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

ガイダンスはありますか?どうもありがとう

4

1 に答える 1

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");  
}
于 2012-08-22T15:05:59.537 に答える