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获取,而是单独获取,即分开进行删除操作。
这里并没有开启级联。
fighting