這是我第一次在我的ASP.NET應用程序的生命週期中定期運行的一個方法,以清理存儲在我的數據庫中的過期會話。它似乎工作得很好,但我的軟件工程師並不覺得這個代碼「正確」。我已經使用LINQ to SQL幾個月了,但我對以下代碼不太自信。我擔心的幾件事情:定期從LINQ to SQL中刪除一組記錄的最佳方法
是下面的代碼安全的在數據庫是由不同的線程在我的應用程序被訪問的情況下運行?我對交易的想法有一個體面的理解,但我想確保我正確地使用它們。
我的查詢是否會導致性能問題?或者在這種情況下選擇這個特定表中的所有記錄是否合適?此方法每15分鐘運行一次,因此不會像在短時間內一遍又一遍地重複查詢。
有沒有更好的方法可以做到這一點?我有一種嘮叨的感覺,那就是。
代碼:
/// <summary>
/// Method, run periodically, to remove all sign in records that correspond to expired sessions.
/// </summary>
/// <param name="connectionString">Database connection string</param>
/// <returns>Number of expired sign in records removed</returns>
public static int Clean(String connectionString)
{
MyDatabaseDataContext db = new MyDatabaseDataContext(connectionString);
var signIns = db.SignIns.Select(x => x);
int removeCount = 0;
using (TransactionScope scope = new TransactionScope())
{
foreach (SignIn signIn in signIns)
{
DateTime currentTime = DateTime.Now;
TimeSpan span = currentTime.Subtract(signIn.LastActivityTime);
if (span.Minutes > 10)
{
db.SignIns.DeleteOnSubmit(signIn);
++removeCount;
}
}
db.SubmitChanges();
scope.Complete();
}
return removeCount;
}
呼叫選擇是沒有意義的,我相信。你應該只能使用「foreach(登錄db.SignIns登錄)」 – 2008-11-19 14:31:07
感謝喬恩 - 我忘了這一點。 – 2008-11-19 14:43:28