Я использую HttpContext.Current.Cache для кэширования данных из БД (веб-приложение .Net 4).
Я хочу убедиться, что у меня нет проблем с синхронизацией потоков.
Сценарий: 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
Вопросы:
Предоставляет ли Cache какой-либо тип блокировки?
Должен ли ядобавить такие блокировки как 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;
Решит ли это какую-нибудь проблему с потоками?
Спасибо