要删除在foreach的第二步中找到的相关实体,下一项为null,EF
本文关键字:EF 实体 null 一项 foreach 删除 二步 | 更新日期: 2023-09-27 18:12:17
假设我们有下面这样的代码片段来删除一些导航实体:
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();
User
和Book
之间存在多对多的关系,但当我想逐个移除它们的Id
在bookIds
阵列中的所有相关Books
时,它只移除它们中的一个(仅第一个(,换句话说,在下一个(第二个(Foreach
步骤中,book2Remove
将变为空。
以及在onModelCreating()
:中建立的关系
HasMany(t => t.Users)
.WithMany(t => t.Books)
.Map(m =>
{
m.ToTable("UserBookMap");
m.MapLeftKey("Id");
m.MapRightKey("UserID");
});
有人知道为什么会发生这种事吗?
提前谢谢。
您可以尝试如下所示。
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();
Oops my wrong,poor Code First:(,有一个问题,传递了相同的所有ID但是Id是非常大的字符串(它们在很小的部分不同(,所以检查它们很无聊:(。
那么我该怎么办呢,是否删除问题?