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