1

我正在使用與其他存儲庫共享ObjectContext的存儲庫實現。該存儲庫包含實體的ObjectSet。我通過Add()方法將新實體添加到ObjectSet。在導入數據時,我想查詢那些新添加的對象以防止重複的數據。如何從庫中獲取新添加的實體?

ObjectContext實現了一個工作模式單元。在導入過程結束時,我想調用提供方法,它調用context.SaveChange()來保存數據。

但是,在找到SaveChanges()之前,我找不到一個簡單的方法來查詢新添加的實體。你們如何處理這些問題?

回答

6

查詢ObjectStateManager

var foo = context.ObjectStateManager 
    .GetObjectStateEntries(EntityState.Added) 
    .Select(s => s.Entity).OfType<Foo>().SingleOrDefault(f => f.Id == bar); 
+0

的問題是,上下文不是在倉庫裏聞名。上下文是通過統一注入的。 code public class Repository :IRepository 其中T:class,IEntity { protected readonly IDbContext context; protected readonly IDbSet entities; #地區構造 ///

///默認的構造 /// /// 包裝對象上下文 公共庫(IDbContext上下文) { 此。 context = context; this.entities = context.Set (); }' – Flo 2012-02-09 09:40:41

+0

@Flo您的抽象(存儲庫)讓你失望。找到一種方法來公開實體框架的完整API。 – Eranga 2012-02-09 09:51:12

+0

我知道這是遲到了,但對於面臨相同問題的任何人,您可以在'UnitOfWork'中放置一個通用方法,並使用上下文爲具有上述實現的任何實體獲取最新添加的條目。 – Vivek 2017-10-25 09:43:59

1

我用的ObservableCollectionrepository.cs如果你願意,你也可以使用ICollection的保存到數據庫中,如下

public ObservableCollection<T> Local { 
    get { return UnitOfWork.GetContext().Set<T>().Local; } 
} 

之前得到的數據,因爲它是一個基類爲觀察收集。現在

,您可以查詢庫,如下圖所示...

Repository.Local.Where(x=>x.TrackingNumber == order.TrackingNumber).SingleOrDefault(); 

但是,請記住使用標識的保存到數據庫中,以便使用一些其他獨特的現場得到的數據之前,你不能得到數據。欲瞭解更多信息請點擊下面的鏈接,其中類似這類的問題有人問我

Why I am not able to get recently added objects (yet to be saved in database) from repository

+0

嘿,先生,這真的很酷。謝謝! – 2017-04-04 16:28:08

相關問題