【发布时间】:2015-11-10 13:10:42
【问题描述】:
我有以下表格球队和球员,其中每个球队有很多球员,基于 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:\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();
}
【问题讨论】:
-
您是否尝试过启用
cascading delete? (我以为这是默认启用的) -
@Stefan 请查看我的编辑
-
如果@Rakin 的回答中选择的
_team包含播放器,您也可以循环收藏并一一删除。不要使用foreach,因为这可能会引发异常,说明集合已更改。 (一定有类似:_team.players)
标签: c# asp.net entity-framework