我正在使用EF并且有一个上下文,我通过上下文中的ExecuteStoreCommand函数使用简单的SQL调用删除了表中的行(由于其他原因,我必须这样做)。它工作正常,但上下文不知道发生了什么。
我在尝试提交某些更改时使用相同的上下文时遇到问题,因为提交未提供预期的受影响行数。
我的问题是,用我所做的更改(已删除的行)更新上下文的最佳方法是什么。
我已经尝试获取已删除的对象并在上下文刷新功能中使用它,但它确实不起作用,可能是因为它(正确)在尝试获取已删除的对象时获取空引用。
_ctx.Refresh(RefreshMode.StoreWins, _ctx.Employees.FirstOrDefault(s => s.EmployeeId == employeeId));
此外,使用ObjectStateManager.GetObjectStateEntries
对我来说也不起作用,因为它不知道哪些对象已被删除。
我不想:
我只想在删除后再次更新上下文。
答案 0 :(得分:1)
试试这个(你必须以某种方式识别被删除的实体 - 如果你不知道你是如何完成的,而解决方案只是一个新的背景):
var employee = ctx.ObjectStateManager.GetObjectStateEntries(~EntityState.Detached)
.Where(e => !e.IsRelationship)
.Select(e => e.Entity)
.OfType<Employee>()
.FirstOrDefault(e => e...);
if (employee != null) ctx.Detach(employee);
顺便说一下。不要对附加实体使用直接SQL修改。这是你可以做的最糟糕的操作。 EF不期望这样,也无法处理它。在这种情况下,最好的解决方案是重新创建上下文。