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

时间:2016-10-09 11:53:35

标签: 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 == bookId);  
                user.Books.Remove(book2Remove);
            } 
            DBContext.SaveChanges(); 

UserBook之间存在多对多关系,但当我想删除其Books所在的所有相关Id {{1} }}数组逐个删除其中一个(仅第一个)在下一个(第二个)bookIds步骤的其他单词中,Foreach将为空结束。

book2Remove中确定的关系:

onModelCreating()

有人知道为什么会这样吗?

提前感谢。

2 个答案:

答案 0 :(得分:0)

您可以尝试如下所示。

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(); 

答案 1 :(得分:0)

糟透了我的错误,可怜的Code-First :),有一个概率,传递所有ID相同 但是Ids是一个非常大的字符串(它们在一小部分是不同的)所以很难检查它们:)。

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

相关问题