【发布时间】:2011-02-23 13:50:52
【问题描述】:
我正在使用 HttpContext.Current.Cache 缓存来自 DB(.Net 4 Web 应用程序)的数据。
我想确保我没有遇到任何线程同步问题。
场景: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
问题:
缓存是否提供任何类型的锁定?
我应该添加像 ReaderWriterLockSlim 这样的锁吗(具体如何)?
现有代码:
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:
用户 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;
它会解决任何线程问题吗?
谢谢
【问题讨论】:
标签: c# .net caching transactions locking