C# Linq删除父级的同时删除子级

之前使用Include获取外键对象列表后,进行删除,一直报错操作失败: 无法更改关系,因为一个或多个外键属性不可以为 null。。。后面还有一串。尝试了几种方式,比如将u.AlbumList=null或者单独存放到一个list中(不过因为list存储是使用同一空间的,且对于数据库来说,还是在linq数据列表中)

百度了一下,也没查出什么好用的,不过其中有一点介绍是,使用remove方式。这里的两个类型的删除都需要使用Remove,如果只用一个的话,也还是还会出现之前的错误提示。

 public ErrorInfo DeleteAlbumCategory(List<int> ids)
        {
            using (TransactionScope transaction = new TransactionScope())
            {
                try
                {
                    using (var dbContext = new ActivityDbContext())
                    {
                        dbContext.AlbumCategorys.Include("AlbumList").Where(u => ids.Contains(u.ID)).ToList().ForEach(u =>
                        {
                            if (u.AlbumList != null)
                            {
                                u.AlbumList.ForEach(v =>
                                {
                                    dbContext.Albums.Remove(v);
                                });
                            }
                            dbContext.AlbumCategorys.Remove(u);
                        });
                        dbContext.SaveChanges();
                        transaction.Complete();
                        return new ErrorInfo() { Error=ErrorCode.Success,Message="删除成功"};
                    }
                }
                catch (Exception e)
                {
                    return new ErrorInfo() { Error = ErrorCode.Exception, Message = e.Message };
                }
            }
        }

当然了,最直接的方式就是,数据不使用include获取,而是单独获取,即分开进行删除操作。

这里并没有开启级联。

 

posted @ 2017-11-03 15:33  Danlis  阅读(300)  评论(0编辑  收藏  举报