2011-06-09 65 views
0

我正在使用實體框架和我的代碼的一部分想要說100個實體的數據庫。我插入的一些實體有多對多的關係,我想確保我只插入新項目。很容易檢查數據庫中的現有數據,但如果我已經將其插入到當前會話中以保存100個項目,我將獲得重複的項目。檢查項目沒有插入實體框架4.1

東西是主鍵只是自動生成的,表唯一性來自EF中不支持的唯一列。如何檢查我是否已經在EF 4.1中插入會話的項目部分?我在DbContext上看到了find方法,但是這需要使用主鍵。鑑於我使用4.1,我也堅持使用DBContext。你可以用通用的方法來檢查嗎?

回答

1

如果你想使用EF你應該堅持PK作爲你的實體的唯一標識。否則你的開發經驗將會非常糟糕。

如果你想檢查是否已經處理在當前的環境中使用相同的項目:

bool exists = context.YourDbSet.Local.Any(x => x.UniqueId == someId) 

如果您需要檢查實體使用的狀態:

EntityState state = context.Entry(entity).State; 

如果您需要檢查實體是否存在於數據庫中使用:

YourEntity entity = context.YourDbSet.SingleOrDefault(x => x.UniqueId == someId); 

最後一條語句實際上是不是併發系統中的最佳方式,因爲當您調用它時,實體不一定存在,但是一旦您調用SaveChanges,其他進程可能已經插入實體。有沒有簡單的方法來處理它。