EF4 DbContext LINQ查询,其中实体未标记为删除

本文关键字:实体 记为 删除 DbContext LINQ 查询 EF4 | 更新日期: 2023-09-27 18:09:08

我似乎找不到对DBContext执行LINQ查询的方法(想知道这是否真的可能(,只提供未标记为删除的项。

例如

// Mark one or more items in the DBContext for deletion.
(from di in DbContext.DeliveryItems where di.Id == myId select di).ToList().ForEach(di => this.Context.DeleteObject(di));

然后我可以执行一个忽略已删除对象的查询吗(当然不必触发SaveChanges(((?

decimal? weight = (from s in this.Context.Stocks
                   where di.Id == myId
                   select s.GrossWeight).Sum();

即,我只想要尚未标记为删除的股票实体的权重总和。

编辑:无法使ChangeTracker((引用工作,因此最终执行了以下操作。。。

List<int> deletedDeliveryItems = this.Context.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Deleted)
                                 .Where(x => x.EntityKey.EntitySetName == "DeliveryItems")
                                 .Select(x => ((DeliveryItem)x.Entity).Id).ToList();
decimal? sumWeightOfDeletedDeliveryItems = (from s in DbContext.Stocks
                                            where deletedDeliveryItems.Count > 0 &&
                                            deletedDeliveryItems.Contains(s.Id)
                                            select s.GrossWeight).Sum();

EF4 DbContext LINQ查询,其中实体未标记为删除

var delete = (from di in DbContext.DeliveryItems where di.Id == myId select di).ToList();
delete.ForEach(di => this.Context.DeleteObject(di));
decimal? weight = (from s in this.Context.Stocks
                   where !delete.Select(di => di.Id).Contains(s.SomeId)
                   select s.GrossWeight).Sum();

如果出于某种原因需要从DbContext中获取已删除的项目。你可以这样做:

var deleted = context.ChangeTracker.Entries()
               .Where(x => x.State == System.Data.EntityState.Deleted)
               .Select(x=> x.Entity).ToList();