【问题标题】:To remove related entities found next item get null in second step of foreach, EF要删除找到下一项的相关实体,在 foreach 的第二步中获取 null,EF
【发布时间】:2016-10-09 11:53:34
【问题描述】:

假设我们有如下的 sn-p 代码来删除一些导航实体:

            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 时,他们的 IdbookIds 数组中一一删除其中一个(只有第一个),换句话说,在 next(second) Foreach step 中,book2Remove 将变为 null 结束。

onModelCreating()中建立的关系:

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

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

提前致谢。

【问题讨论】:

  • 您是否收到异常消息?如果是这样,那么消息是什么?
  • @CodeNotFound 不,没有任何Exp.
  • 为什么不包括随叫随到的书籍?我认为 user.Books 是空的,而不是 booktoremove。除非加载的图书列表中没有匹配的图书,否则 SingleOrDefault 将返回 null。
  • 你也可以显示你的模型代码吗?
  • @Sampath,谢谢你的回复,我是通过代码优先的方法做到的,有很多属性,但User 有一个导航属性为ICollectionBook,反之亦然,DB 中的表UserBookMapBookIdUserId 不多,除了提到的道具之外,一切都像魅力一样......

标签: c# entity-framework ef-code-first entity-framework-6


【解决方案1】:

你可以试试如下图。

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

【讨论】:

  • 谢谢,但我不能像你的那样使用Include,我的Include参数是string路径,反正我正在寻找原因...
【解决方案2】:

糟糕,我错了,糟糕的 Code-First :),有一个问题,通过了所有相同的 ID 但是 ID 是非常大的字符串(它们在一小部分不同),所以检查它们很无聊:)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 2017-05-15
    • 1970-01-01
    • 2013-11-27
    • 1970-01-01
    • 2015-04-08
    • 2014-06-20
    相关资源
    最近更新 更多