我正在使用HttpContext.Current.Cache來緩存來自數據庫(.Net 4 Web應用程序)的數據。使用.Net Cache時,我應該添加Locks還是TransactionScope?
我想確保我不會遇到任何線程同步問題。
場景:3級的用戶指向同一公司對象:
用戶A:
Profile.Company.Name = 「CompX」;
Profile.Company.Desc = 「CompXDesc」;
Profile.Company.Update(); //Update DB
用戶B:
String Name = Profile.Company.Name;
用戶C:
Profile.Company.Name = 「CompY」;
Profile.Company.Update(); //Update DB
Q問題:
緩存是否提供任何類型的鎖定?
我應該像ReaderWriterLockSlim一樣添加Lock嗎?
現有代碼:
ProfileBLL:
public CompanyBLL Company {
get {
return CompanyBLL.GetById(this.Company_ID);
}
}
// HttpContext.Current.Cache
public static CompanyBLL GetById(int Company_ID) {
string key = "GetById_" + Company_ID.ToString();
CompanyBLL ret = null;
if (Cache[key] != null) {
ret = (CompanyBLL)Cache[key];
}
else
{
ret = DAL_Company<CompanyBLL>.GetById(Company_ID);
Cache[key] = ret;
}
return ret;
}
另一種選擇是增加的TransactionScope上任何DB更新:
用戶A:
using (TransactionScope Scope = new TransactionScope()){
Profile.Company.Name = 「CompX」;
Profile.Company.Desc = 「CompXDesc」;
Profile.Company.Update(); //Update DB
Scope.Complete(); //COMMIT TRANS
}
用戶B:
String Name = Profile.Company.Name;
它能解決任何線程問題嗎?
感謝