C# 要删除在foreach的第二步中找到的下一项get null的相关实体,请执行EF
假设我们有下面这样的代码片段来删除一些导航实体:C# 要删除在foreach的第二步中找到的下一项get null的相关实体,请执行EF,c#,entity-framework,ef-code-first,entity-framework-6,C#,Entity Framework,Ef Code First,Entity Framework 6,假设我们有下面这样的代码片段来删除一些导航实体: User user = DBContext.Users.SingleOrDefault(p => p.UserID == userID); foreach (string bookId in bookIds) { Book book2Remove = user.Books.SingleOrDefault(bk => bk.Id =
User user = DBContext.Users.SingleOrDefault(p => p.UserID == userID);
foreach (string bookId in bookIds)
{
Book book2Remove = user.Books.SingleOrDefault(bk => bk.Id == bookId);
user.Books.Remove(book2Remove);
}
DBContext.SaveChanges();
在用户
和书籍
之间有一种多对多的关系,但是当我想删除所有相关的书籍
时,它们的Id
都在bookIds
数组中,一个接一个地删除其中一个(仅第一个),换句话说,在下一(第二)Foreach
步骤中,book2Remove
将以null结束
以及onModelCreating()
中建立的关系:
有人知道为什么会这样吗
提前感谢。您可以按如下所示进行尝试
User user = DBContext.Users
.Include(b => b.Books)
.FirstOrDefault(p => p.UserID == userID);
foreach (string bookId in bookIds)
{
Book book2Remove = user.Books.FirstOrDefault(bk => bk.Id == bookId);
user.Books.Remove(book2Remove);
}
DBContext.SaveChanges();
您可以按如下所示进行尝试
User user = DBContext.Users
.Include(b => b.Books)
.FirstOrDefault(p => p.UserID == userID);
foreach (string bookId in bookIds)
{
Book book2Remove = user.Books.FirstOrDefault(bk => bk.Id == bookId);
user.Books.Remove(book2Remove);
}
DBContext.SaveChanges();
哎呀,我错了,首先是糟糕的代码:),有一个问题,传递了所有相同的ID 但是ID是非常大的字符串(它们在一小部分中是不同的),所以检查它们很无聊:) 那我该怎么办,
是否删除该问题?哦,首先是我的错误、糟糕的代码:),有一个问题,传递的所有ID都相同 但是ID是非常大的字符串(它们在一小部分中是不同的),所以检查它们很无聊:) 那我该怎么办,
是否删除该问题?是否收到异常消息?如果是,那么消息是什么?@CodeNotFound否,没有任何经验。为什么不包括随叫随到的书籍?我认为user.Books是空的,而不是booktoremove。除非加载的图书列表中没有匹配的图书,否则SingleOrDefault将返回null。您能同时显示您的模型代码吗?@Sampath,谢谢您的回复,我是通过代码优先的方法完成的,有很多属性,但是
用户
有一个导航道具作为图书
的ICollection
,反之亦然,DB中的一个表UserBookMap
有BookId
和UserId
没有更多,除了上面提到的道具,一切都像一个符咒一样工作……你收到异常消息了吗?如果是,那么消息是什么?@CodeNotFound否,没有任何经验。为什么不包括随叫随到的书籍?我认为user.Books是空的,而不是booktoremove。除非加载的图书列表中没有匹配的图书,否则SingleOrDefault将返回null。您能同时显示您的模型代码吗?@Sampath,谢谢您的回复,我是通过代码优先的方法完成的,有很多属性,但是用户
有一个导航道具作为图书
的ICollection
,反之亦然,DB中的一个表UserBookMap
有BookId
和UserId
没有更多,除了上面提到的道具,一切都像一个符咒一样工作…谢谢,但我不能像你一样使用Include
,我的Include参数是string
path,无论如何我在寻找原因…谢谢,但我不能像你一样使用Include
,我的Include参数是string
path,无论如何我都在寻找原因。。。