如何从存储库中获取新添加的实体?

时间:2012-02-07 15:28:56

标签: entity-framework entity-framework-4.1 ef-code-first repository-pattern unit-of-work

我正在使用与其他存储库共享ObjectContext的存储库实现。存储库包含ObjectSet个实体。我正在通过Add()方法将新实体添加到ObjectSet。在导入数据时,我想查询这些新添加的对象以防止重复数据。

ObjectContext实现了一个工作单元模式。在导入过程结束时,我想调用调用context.SaveChange()的commit方法来保存数据。

但是,在我致电SaveChanges()之前,我找不到一种简单的方法来查询新添加的实体。你们是如何处理这些问题的?

2 个答案:

答案 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