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

C# Asp.net如何使用实体框架删除一对多的对象,c#,asp.net,entity-framework,C#,Asp.net,Entity Framework,我有以下表格团队和玩家,其中每个团队有许多玩家,基于团队ID作为guid。正如您可以看到的,团队表中的第一行guid为空i no,它只是一个测试在players表中有两条基于teamID的记录 我的主要问题是如何使用实体框架一次性删除团队和玩家 正如你看到的第一张唱片 所以在我的团队网格中,我只是做了下面的工作,但正如你所看到的,这只是抓取团队对象。Obv我可以先攻击玩家对象,然后先删除他们 if (e.CommandName == "Delete") {

我有以下表格团队和玩家,其中每个团队有许多玩家,基于团队ID作为guid。正如您可以看到的,团队表中的第一行guid为空i no,它只是一个测试在players表中有两条基于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:\new code\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();


        }

您是否尝试过启用级联删除?(我以为这是默认启用的)@Stefan请看我的编辑如果从@Rakin的答案中选择的
\u团队
包含玩家,您也可以循环收集并逐个删除他们。但不要使用
foreach
,因为这样可能会引发异常,表明集合已更改。(必须有类似的内容:
\u team.players
)请解释为每个人做一个如何有效。如果有100条记录会怎么样?我还有一个错误说错误36“soccerCmsDal.team”不包含“players”的定义,并且找不到接受类型为“soccerCmsDal.team”的第一个参数的扩展方法“players”(是否缺少using指令或程序集引用?)C:\new code\UniteCms\UniteCms\UniteCms\BackDoor\teams\default.aspx.cs 38 54 UniteCmsdid您为列teamid设置了外键吗?我试过了,但它说我不能,因为teamid不是unqiue,但在我的情况下teamid是相同的??您能解释一下我截屏的外键吗?如果我做错了,我是怎么做的
  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();