如何筛选使用linq to实体删除的实体
我有一个singleton DBContext,但由于某些原因,当实例在两个方法之间共享时,不会填充在其他方法中所做的更改 例如:如何筛选使用linq to实体删除的实体,linq,entity-framework,entity-framework-4,linq-to-entities,Linq,Entity Framework,Entity Framework 4,Linq To Entities,我有一个singleton DBContext,但由于某些原因,当实例在两个方法之间共享时,不会填充在其他方法中所做的更改 例如:Method1Delete2RowS()将删除2行。 Method2()读取所有未删除的行 我的方法2也总是显示已删除的记录。因为我还没有接受任何改变 我用过这样的东西 context.Students.Where(x => context.ObjectStateManager.GetObjectStateEntry(x)
Method1Delete2RowS()
将删除2行。Method2()
读取所有未删除的行
我的方法2也总是显示已删除的记录。因为我还没有接受任何改变
我用过这样的东西
context.Students.Where(x => context.ObjectStateManager.GetObjectStateEntry(x)
.State != System.Data.EntityState.Deleted);
但此代码引发一个异常,LINQ无法识别“GetObjectStateEntry()”
如何修复此问题?异常是由于EF试图将LINQ查询转换为数据库执行的SQL而导致的。当然,无法将
GetObjectStateEntry
调用发送到数据库。您必须切换到linq to对象:
context.Students.AsEnumerable().Where(x => ...
不幸的是,在ObjectContext
API中,没有一种简单的方法可以获取未删除的实体。
在DbContext
API中,您可以使用本地集合,如
context.Students.Local
本地集合显示由以前的查询加载的实体。好在删除的条目被从本地集合中排除。也许是为了鼓励您移动到
DbContext
?删除行后是否有context.SaveChanges()
?我不想保存更改,所以我没有。当用户单击Save时,更改将被保存。我对查询做了如下更改:context.Students.Where(x=>x.EntityState!=System.Data.EntityState.Deleted);我得到了以下异常:指定的类型成员“EntityState”在LINQ to实体中不受支持。仅支持初始化器、实体成员和实体导航属性。您的<代码> dBrave真的是<代码> DbValue还是