我正在處理一個合適的場景。基於C中的條件保護關鍵部分#
我正在使用EntityFramework保存(插入/更新)到多線程環境中的SQL數據庫中。問題是我需要訪問數據庫來查看是否已經創建了一個具有特定鍵的寄存器,以便設置一個字段值(正在執行)或者它是新的以設置不同的值(待定)。這些寄存器由唯一的GUID標識。
我已經通過設置鎖定,因爲我知道實體將不會出現在任何其他工藝,換句話說,我不會有相同的GUID在不同的過程,它似乎是工作的罰款解決了這個問題。它看起來像這樣:
static readonly object LockableObject = new object();
static void SaveElement(Entity e)
{
lock(LockableObject)
{
Entity e2 = Repository.FindByKey(e);
if (e2 != null)
{
Repository.Insert(e2);
}
else
{
Repository.Update(e2);
}
}
}
但這意味着當我有一個巨大的要求被保存的數量,他們將排隊。
我不知道是否有類似的東西(請把它僅僅作爲一個想法):
static void SaveElement(Entity e)
{
(using ThisWouldBeAClassToProtectBasedOnACondition protector = new ThisWouldBeAClassToProtectBasedOnACondition(e => e.UniqueId)
{
Entity e2 = Repository.FindByKey(e);
if (e2 != null)
{
Repository.Insert(e2);
}
else
{
Repository.Update(e2);
}
}
}
這個想法是有一種保護的受保護基於一個條件,使每個實體Ë會有基於e.UniqueId屬性的自己的鎖。
有什麼想法?
爲什麼不使用數據庫事務或存儲過程? – Ikaso 2010-05-26 16:15:50