C# 如何清除实体框架中挂起的更改

C# 如何清除实体框架中挂起的更改,c#,sql,entity-framework,C#,Sql,Entity Framework,我在DbContext中有一些不想保存的表数据。我已经删除了数据库,重新设置,但是挂起的更改不会从DbContext中消失 重建数据库后,我的数据库表为空,但当我将实体作为对象列表调用时,它仍然包含旧对象。对于如何使用Entity Framework 6从DbContext中清除旧的挂起数据,有什么建议吗 您必须处理DbContext using (var ctx = new MyDbContext()) { // Do your thing... // Call ctx.Sav

我在
DbContext
中有一些不想保存的表数据。我已经删除了数据库,重新设置,但是挂起的更改不会从
DbContext
中消失


重建数据库后,我的数据库表为空,但当我将实体作为对象列表调用时,它仍然包含旧对象。对于如何使用Entity Framework 6从
DbContext
中清除旧的挂起数据,有什么建议吗

您必须处理DbContext

using (var ctx = new MyDbContext())
{
    // Do your thing...
    // Call ctx.SaveChanges();
}

using (var ctx = new MyDbContext())
{
    // Do your thing...
    // You should not find the data anymore
}

您正在
DbContext
中保存修改过的对象,对吗

如果是这样,那么问题在于您在后续操作中重用了相同的
DbContext
对象。当前操作完成后,应立即处理
DbContext
,然后为新操作创建新操作

通常,您的所有操作都应具有以下格式:

using (DbContext context = new DbContext()) // Use concrete context type
{
    // Do stuff with context
    context.SaveChanges();
} // At this point your context seizes to exist

如果出现任何错误,例如出现异常,或决定不调用
SaveChanges
,则当前在上下文中保存的所有中间更改也将被销毁。

aha没有想到这一点。但是这些物品会被移除吗?或者我怎样才能移除它们?你不能移除它们。只需创建
DbContext
的新实例,它将是空的。在操作之间不重用
DbContexts
是一般规则。它们消耗内存,甚至可能导致错误的执行——事实上,在您的示例中就是这样。好吧,现在我明白了。谢谢这不是真正的问题,尽管我发现我有一个正在使用的隐藏数据库,当我从我的EF数据访问从mvc客户端移动到wcf服务时,我有不同的连接字符串。但无论如何,这是一个好答案!