我有一个单独的DBContext但由于某种原因,当实例在两个方法之间共享时,不会填充在其他方法中所做的更改。
例如:Method1Delete2RowS()
将删除2行
Method2()
读取所有未删除的行
我的方法2也总是显示已删除的记录。因为我还没有接受任何更改。
我使用过这样的东西
context.Students.Where(x => context.ObjectStateManager.GetObjectStateEntry(x)
.State != System.Data.EntityState.Deleted);
但此代码抛出一个异常,即LINQ无法识别“GetObjectStateEntry()”。
我该如何解决这个问题?
答案 0 :(得分:0)
异常是由于EF尝试将您的LINQ查询转换为由数据库执行的SQL而引起的。当然,无法将GetObjectStateEntry
调用发送到数据库。你必须切换到linq-to-objects:
context.Students.AsEnumerable().Where(x => ...
不幸的是,在ObjectContext
API中,没有一种简单的方法来获取未删除的实体。
在DbContext
API中,您可以使用本地集合,例如
context.Students.Local
本地集合显示先前查询加载的实体。好处是删除的条目从本地集合中排除。也许是你搬到DbContext
的诱因?