【问题标题】:Entity framework not allowing me to delete a player实体框架不允许我删除玩家
【发布时间】:2015-11-12 19:08:53
【问题描述】:

我正在尝试删除一行数据,但它不允许我删除。我正在使用实体框架。一个玩家可以在一个团队中,但一个团队可以有很多玩家。但我想要做的就是删除一个不属于团队的玩家,我应该可以毫无问题地删除它,

我正在使用 EF5 和 asp.net 4 网络表单

protected void grdSoccerPlayers_ItemCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
{       
    if (e.CommandName == "Delete")
    {
        GridDataItem item = e.Item as GridDataItem;
        Guid strId = new Guid(item.GetDataKeyValue("id").ToString());

        player _player = _dal.GetPlayerBYID(strId);
        _dal.SoccerEntities.AddToplayers(_player);
        _dal.SoccerEntities.DeleteObject(_player);

        _dal.SoccerEntities.SaveChanges();
        grdSoccerPlayers.DataBind();
        grdSoccerPlayers.Rebind();
    }
}

使用以下 linq 语句填充网格。

public IQueryable<player> getAllPlayers()
{
    var _player = SoccerEntities.players.ToList();
    return _player.AsQueryable();
}

然而,这个外键放在 player 表中的 teamID 上,将它链接到 obv 团队表。但是我应该仍然可以删除一个玩家,我不应该。?但是,当我去删除一个团队时,该代码可以正常工作,但当我只想删除一个玩家时却不行。我怎么能克服这个。

当我删除 addtoplayers 时出现以下错误

System.InvalidOperationException:无法删除该对象,因为它在 ObjectStateManager 中找不到。在 System.Data.Objects.ObjectContext.DeleteObject(Object entity, EntitySet expectedEntitySet) at System.Data.Objects.ObjectContext.DeleteObject(Object entity) at UniteCms.BackDoor.players._default.grdSoccerPlayers_ItemCommand(Object sender, GridCommandEventArgs e) in c :\新代码\UniteCms\UniteCms\UniteCms\BackDoor\players\default.aspx.cs:第83行

然后我尝试使用以下方法解决它

Entity Framework Delete Object Problem

但它给出了以下错误。

Entity Framework Delete Object Problem

System.InvalidOperationException:具有空 EntityKey 值的对象不能附加到对象上下文。在 System.Data.Objects.ObjectContext.Attach(IEntityWithKey entity) 在 UniteCms.BackDoor.players._default.grdSoccerPlayers_ItemCommand(Object sender, GridCommandEventArgs e) 在 c:\new code\UniteCms\UniteCms\UniteCms\BackDoor\players\default。 aspx.cs:第 83 行

【问题讨论】:

  • 你的例外是什么?
  • @hellogoodnight 记录也不例外,只是根本没有删除
  • @RameshBabu 认为这不起作用
  • @RameshBabu 你没有建议什么代码!
  • 我要求发布您为DeleteObject 方法编写的代码

标签: c# asp.net entity-framework linq


【解决方案1】:

好的对于其他任何人来说,当唯一值是 00000000-0000-0000-0000-000000000000 时,似乎 ef 不喜欢它,因为一旦我处理了 roge 记录,它似乎可以删除,但它不是在我的网格上显示新数据,直到我刷新页面。

我最终为其他人使用的代码是。

GridDataItem item = e.Item as GridDataItem;
Guid strId = new Guid(item.GetDataKeyValue("id").ToString());

   player _player = _dal.GetPlayerBYID(strId);
   _dal.SoccerEntities.Attach(_player);
   _dal.DeleteObject(_player);
   _dal.SaveChanges();
   grdSoccerPlayers.DataBind();
   grdSoccerPlayers.Rebind();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多