我正在使用与其他存储库共享ObjectContext
的存储库实现。存储库包含ObjectSet
个实体。我正在通过Add()
方法将新实体添加到ObjectSet
。在导入数据时,我想查询这些新添加的对象以防止重复数据。
ObjectContext
实现了一个工作单元模式。在导入过程结束时,我想调用调用context.SaveChange()
的commit方法来保存数据。
但是,在我致电SaveChanges()
之前,我找不到一种简单的方法来查询新添加的实体。你们是如何处理这些问题的?
答案 0 :(得分:6)
查询ObjectStateManager
。
var foo = context.ObjectStateManager
.GetObjectStateEntries(EntityState.Added)
.Select(s => s.Entity).OfType<Foo>().SingleOrDefault(f => f.Id == bar);
答案 1 :(得分:1)
我在 repository.cs 中使用了 ObservableCollection 来获取数据,然后将其保存到数据库中,如下所示
public ObservableCollection<T> Local {
get { return UnitOfWork.GetContext().Set<T>().Local; }
}
如果你愿意,你也可以使用ICollection,因为它是observablecollection的基类。
现在,您可以查询存储库,如下所示......
Repository.Local.Where(x=>x.TrackingNumber == order.TrackingNumber).SingleOrDefault();
但是,请记住,在保存到数据库之前,您无法使用Id获取数据,因此请使用其他一些唯一字段来获取数据。有关详细信息,请单击以下链接,我提出了类似的问题
Why I am not able to get recently added objects (yet to be saved in database) from repository