2010-12-17 84 views
0

我正在使用存儲庫模式。實體框架:如何在提交之前檢查值是否存在

我有我使用一個服務提交國家資料庫。我應該在哪裏查看該國是否已經存在於數據庫中,我拋出異常?

有沒有辦法在一個數據庫調用做到這一點? (如果不存在,請檢查並插入)?如果這是可能的,是否可以在服務層完成? (如果這是你推薦的地方,我會進行檢查)。

回答

1

由於多用戶併發的,你不能SELECT然後INSERT和得到保證沒有問題。因此,由@Coding Gorilla提出的解決方案可能在高併發情況下失敗。

你應該把一個UNIQUE指數在適當的DB列和處理(或讓表面)數據庫異常,如果國家不存在,你會得到。是的,你可以在服務層做到這一點。這只是一個數據庫調用,並且不會失敗,因爲數據庫服務器可以保護您免受併發問題的困擾。

+0

你是說讓EF拋出錯誤,只是在服務層中調用Insert?我不必寫任何支票? – 2010-12-17 18:49:53

+0

如果違反'UNIQUE'約束,數據庫服務器將返回錯誤。當這種情況發生時,EF將會拋出。 – 2010-12-17 18:57:35

1

是否把這種邏輯在您的服務或您的資料庫是有點主觀的問題。就我個人而言,如果它不存在,我會進行服務檢查並插入,但在嘗試執行插入操作之前,也會讓您的存儲庫驗證它不存在,這樣,您的存儲庫正在執行一些「邏輯」來防止數據庫從充斥着愚蠢。

怎麼辦?

public void InsertIfNonExistant(string Country) 
{ 
    if(!_myContext.Countries.Any(c=>c.Name == Country)) 
     InsertNewCountry(Country); 
} 
相關問題