我的数据库中有多对多的关系。在更新实体时一切正常,但从集合中删除旧对象会引发错误。
public void Update(CourseGroup courseGroupToUpdate)
{
try
{
var courseGroup = _context.CourseGroups
.Include("PricingSchedule")
.Include("GroupCourses")
.AsNoTracking()
.SingleOrDefault(cg => cg.Id == courseGroupToUpdate.Id &&
cg.IsActive == true);
var coursesToDelete = courseGroup.GroupCourses.ExceptBy(courseGroupToUpdate.GroupCourses, cg => cg.CourseId).ToList();
var coursesToAdd = courseGroupToUpdate.GroupCourses.ExceptBy(courseGroup.GroupCourses, cg => cg.CourseId).ToList();
_context.Entry(courseGroupToUpdate).State = EntityState.Modified;
_context.GroupCourses.RemoveRange(coursesToDelete);
_context.GroupCourses.AddRange(coursesToAdd);
_context.Entry(courseGroupToUpdate.PricingSchedule).State = EntityState.Modified;
_context.SaveChanges();
}
上述代码可以正常工作,除了这一行:
_context.GroupCourses.RemoveRange(coursesToDelete);
执行时,抛出此错误:
无法删除对象,因为在ObjectStateManager中找不到该对象。
如何解决此问题?
答案 0 :(得分:0)
我相信你使用ToList()是从对象上下文中取消附加实体。您可以删除多余的ToList()调用,也可以手动重新附加实体。
试试这个:
var coursesToDelete = courseGroup.GroupCourses.ExceptBy(courseGroupToUpdate.GroupCourses, cg => cg.CourseId);
_context.GroupCourses.RemoveRange(coursesToDelete);
或者这个:
var coursesToDelete = courseGroup.GroupCourses.ExceptBy(courseGroupToUpdate.GroupCourses, cg => cg.CourseId).ToList();
context.Attach(coursesToDelete);
_context.GroupCourses.RemoveRange(coursesToDelete);
答案 1 :(得分:0)
sed '/^option1.* = /!d;s///' somefile
选项是否意味着您不会拥有grep -oP '^option1.* = \K.*' somefile
中的对象?我认为删除可能会解决您的问题。
在没有sed '/^option1.* = /!d;s///;q' somefile
grep -m1 -oP '^option1.* = \K.*' somefile
调用的情况下尝试查询,看看会发生什么。