繁体   English   中英

Asp.net 如何使用实体框架删除一对多对象

[英]Asp.net How do i delete objects with One To Many using entity framework

我有下表的团队和玩家,其中每个团队有很多玩家,基于 teamId 作为 guid。 如您所见,团队表中的第一行 guid 为空 i 不,它只是一个测试在玩家表中基于 teamID 有两条记录

在此处输入图片说明

我使用实体框架的主要问题如何使用实体框架一次性删除团队和球员

在此处输入图片说明

正如你所看到的第一条记录

因此,在我的团队网格中,我只是在执行以下操作,但正如您所看到的,这只是抓取团队对象。 Obv 我可以先击中玩家对象,然后先删除它们。

        if (e.CommandName == "Delete")
        {

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


            _dal.SoccerEntities.teams.DeleteObject(team);


        }

这是我的 GetTeamByTeamId 函数

    public team GetTeamByTeamId(Guid  teamId)
         {
        try
        {
            if (teamId == Guid.Empty)
            {
                team _team = new team();

                return _team;
            }
            else
            {
                var q = SoccerEntities.teams.Where(p => p.id == teamId);

                if (q == null)
                    throw new EntityContextException(string.Format("A team could not be found {0}!", teamId));
                else
                    return q.ToList()[0];
            }
        }
        catch (Exception ex)
        {
            throw new EntityContextException("GetTeamByTeamId failed.", ex);
        }




    }

顺便说一下,这是asp.net

编辑

我试过 rankins suggesiton 但在编译时出错

错误 36“soccerCmsDal.team”不包含“players”的定义,并且找不到接受“soccerCmsDal.team”类型的第一个参数的扩展方法“players”(您是否缺少 using 指令或程序集引用?) C:\\新代码\\UniteCms\\UniteCms\\UniteCms\\BackDoor\\teams\\default.aspx.cs 38 54 UniteCms

我尝试添加外键在此处输入图片说明

好的现在我有外键设置它不起作用它给我一个空错误

 {
            GridDataItem item = e.Item as GridDataItem;
            Guid strId = new Guid(item.GetDataKeyValue("id").ToString());
            team _team = _dal.SoccerEntities.teams.FirstOrDefault(p => p.id == strId);
            if (_team != null)
            {
                foreach (player _player in _team.players)
                {
                    _dal.SoccerEntities.players.DeleteObject(_player);
                }
                _dal.SoccerEntities.teams.DeleteObject(_team);
            }
            _dal.SoccerEntities.SaveChanges();


        }

在此处输入图片说明

  GridDataItem item = e.Item as GridDataItem;
            Guid strId = new Guid(item.GetDataKeyValue("id").ToString());
            team _team = _dal.SoccerEntities.teams.FirstOrDefault(p => p.id == strId);
            if (_team != null)
            {

                 if( _team.players!= null &&  _team.players.Count>0)
                 { var _palayers = _team.players.ToList();
                    foreach (player _player in _palayers )
                    {
                        _dal.SoccerEntities.players.DeleteObject(_player);
                    }
                 }
                _dal.SoccerEntities.teams.DeleteObject(_team);
            }
            _dal.SoccerEntities.SaveChanges();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM