如何过滤使用linq删除实体的实体

时间:2013-11-27 20:35:55

标签: linq entity-framework entity-framework-4 linq-to-entities

我有一个单独的DBContext但由于某种原因,当实例在两个方法之间共享时,不会填充在其他方法中所做的更改。

例如:Method1Delete2RowS()将删除2行 Method2()读取所有未删除的行

我的方法2也总是显示已删除的记录。因为我还没有接受任何更改。

我使用过这样的东西

context.Students.Where(x => context.ObjectStateManager.GetObjectStateEntry(x)
                            .State != System.Data.EntityState.Deleted);

但此代码抛出一个异常,即LINQ无法识别“GetObjectStateEntry()”。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

异常是由于EF尝试将您的LINQ查询转换为由数据库执行的SQL而引起的。当然,无法将GetObjectStateEntry调用发送到数据库。你必须切换到linq-to-objects:

context.Students.AsEnumerable().Where(x => ...

不幸的是,在ObjectContext API中,没有一种简单的方法来获取未删除的实体。 在DbContext API中,您可以使用本地集合,例如

context.Students.Local

本地集合显示先前查询加载的实体。好处是删除的条目从本地集合中排除。也许是你搬到DbContext的诱因?