删除引用其他对象的实体对象(外键关系表)

时间:2011-11-15 13:20:02

标签: c# asp.net-mvc-3 entity-framework

public void DeleteGenreList()
{
    var genreList = entities.Genres.AsEnumerable();

    foreach (var oneGenre in genreList)
    {

        foreach (var onesong in oneGenre.Songs)
        {
            entities.Songs.DeleteObject(onesong);
        }

        entities.Genres.DeleteObject(oneGenre);
    }
}

我无法删除包含歌曲对象的Genre对象,因为我收集了修改错误,请帮助thx!

3 个答案:

答案 0 :(得分:0)

这不是外键关系问题,你不能删除在某个循环中处理的对象。

您可以使用以下内容:

var genreList = entities.Genres.ToList();

genreList.ForEach(x=>x.Songs.Clear());    
entities.Genres.Clear();

答案 1 :(得分:0)

使用For Each循环枚举时,无法修改集合。

这应该有效:

for (int i=0;i<entities.Songs.Count;i++)
{
       entities.Songs.DeleteObject(entities.Songs[i]);
       i--;
}

答案 2 :(得分:0)

如果流派和歌曲之间的关系被标记为级联删除(在模型映射和数据库中),那么你应该只能删除流派,EF会照顾删除歌曲......