【发布时间】: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();
User 和 Book 之间存在多对多的关系,但是当我想删除所有相关的 Books 时,他们的 Id 在 bookIds 数组中一一删除其中一个(只有第一个),换句话说,在 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有一个导航属性为ICollection的Book,反之亦然,DB 中的表UserBookMap有BookId和UserId不多,除了提到的道具之外,一切都像魅力一样......
标签: c# entity-framework ef-code-first entity-framework-6