2011-05-27 93 views
0

我使用實體框架與C#。我想(可能使用TRANSACTIONS)自動測試某個屬性NAME是否在某個表(實體)中,如果不是,那麼我會添加新的實體並承諾。鎖定實體框架

這怎麼辦?還是有更好的解決方案?

+0

http://stackoverflow.com/questions/1963829/how-can-i-add-constraints-to-an-ado-net-entity – 2011-05-27 06:16:13

+0

您是否嘗試將EF查詢放入同一個TransactionScope中? – 2011-05-27 07:07:38

回答

1

做到這一點的一種方法是定義DB上的約束。

由於實體框架並不知道數據庫級別的約束條件,因此應該編寫約束條件(即創建.SQL文件),以便將其添加到數據庫的任何新實例中。

另一種方法是爲每個實體類型(如CustomerRepository)實現一個標準存儲庫,然後在存儲庫的Create方法中執行檢查。這本身並不能保證唯一性,因爲兩個用戶可能同時創建一個具有相同名稱的實體,並且直到您嘗試提交(即SaveChanges)時該檢查纔會捕獲它,但情況也是如此當您定義數據庫上的唯一性約束...

+0

謝謝,我將手動編寫SQL腳本創建約束。 – Cartesius00 2011-05-27 08:57:03

1

您必須在數據庫中爲該列創建唯一索引。事務不會有幫助,因爲兩個不同的應用程序或上下文實例不會對編程級鎖定起作用。