要删除在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(); 

UserBook之间存在多对多的关系,但当我想逐个移除它们的IdbookIds阵列中的所有相关Books时,它只移除它们中的一个(仅第一个(,换句话说,在下一个(第二个(Foreach步骤中,book2Remove将变为空。

以及在onModelCreating():中建立的关系

 HasMany(t => t.Users)
            .WithMany(t => t.Books)
            .Map(m =>
            {
                m.ToTable("UserBookMap");
                m.MapLeftKey("Id");
                m.MapRightKey("UserID");
            });

有人知道为什么会发生这种事吗?

提前谢谢。

要删除在foreach的第二步中找到的相关实体,下一项为null,EF

您可以尝试如下所示。

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是非常大的字符串(它们在很小的部分不同(,所以检查它们很无聊:(。

那么我该怎么办呢,是否删除问题?