Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 要删除在foreach的第二步中找到的下一项get null的相关实体,请执行EF_C#_Entity Framework_Ef Code First_Entity Framework 6 - Fatal编程技术网

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,无论如何我都在寻找原因。。。