4
我使用實體框架從不同的應用程序調用相同的數據庫。但是,當一個應用程序正在讀取/更新記錄時,我不希望其他應用程序讀取該數據。實體框架 - 在記錄中讀取鎖定
我試着用下面的示例代碼;但是,他們仍然能夠讀取記錄。
任何建議或不同的方法將不勝感激!
using (Entities context = new Entities(ConnectionString))
{
DBTable entity;
do
{
entity = context.DBTable
.Where(item => item.IsLock == false)
.FirstOrDefault();
if (entity != null)
{
// Map entity to class
......
// Lock the record; it will be unlocked later by a calling method.
entity.IsLock = true;
context.SaveChanges();
count++;
}
} while (entity != null && count < 100);
}
編輯:基本上,我讀了一條記錄並做了一些事情(有時需要很長時間)。然後用成功/失敗標誌更新記錄(如果失敗,其他人可以再次這樣做)。我不希望其他應用程序多次執行成功任務。
如果你想在編輯時鎖定記錄,可以考慮dBase。更好地檢查你的方法是否真的有必要,這不是正常的做法。 –
如果運行時間不長,可以使用TransactionScope。 – Jeff
這聽起來不像你想使用數據庫/事務鎖的那種 - 「」(它有時需要很長時間)「」。我建議你在問題表中添加一列 - IsLocked,並根據需要進行更新。儘管(如果某個進程鎖定了一條記錄,然後終止了該進程,那麼可能會需要更復雜的)。爲了解決這個問題,考慮第二張表,記錄您的鎖(鎖定ID,進程ID,到期日期),然後將鎖定ID添加到您想保持不變的記錄中? – Smudge202