/// <summary> /// 注意:更新方法的调用要确保model不是缓存得到的,否则缓存数据会覆盖掉数据库数据,另外有事务的问题,如果ado有开事务,更新缓存之后如果事务回滚,缓存数据就有问题。 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="model"></param> /// <param name="ado"></param> /// <param name="IsUseCache"></param> /// <returns></returns> public static bool Update <T>(T model, AdoHelper ado, bool IsUseCache = false) where T : EntityBase, new() { EntityQuery <T> q = new EntityQuery <T>(ado); int count = q.Update(model); if (RedisHelper.IsUseCache && IsUseCache && (model is ICacheEvent)) { ICacheEvent im = model as ICacheEvent; string[] cks = im.GetCacheKeys(); string rule = im.GetCacheKeyRule(); MemoryCache mc = MemoryCache.Default; CacheItemPolicy cip = new CacheItemPolicy(); cip.AbsoluteExpiration = DateTimeOffset.Now.AddHours(6); foreach (var item in cks) { string key = string.Format(rule, item, model[item]); mc.Set(key, model, cip); RedisHelper.SetStringKey <T>(key, model, DateTime.Now.AddDays(7) - DateTime.Now); } } return(count > 0); }
/// <summary> /// 根据id获取实体对象 /// </summary> /// <param name="ID">对象id</param> /// <returns></returns> public static T GetModel <T>(int ID, bool IsUseCache = false) where T : EntityBase, ILongID, new() { T model = new T(); model.ID = ID; //UpdateCacheEventSource es = new UpdateCacheEventSource(); //model.Subscribe(es); //es.RaiseEvent("GetModel"); if (RedisHelper.IsUseCache && IsUseCache && (model is ICacheEvent)) { MemoryCache mc = MemoryCache.Default; ICacheEvent im = model as ICacheEvent; string rule = im.GetCacheKeyRule(); string key = string.Format(rule, model.GetIdentityName(), model.ID); CacheItemPolicy cip = new CacheItemPolicy(); cip.AbsoluteExpiration = DateTimeOffset.Now.AddHours(6); var cache = mc.Get(key); if (cache != null) { model = cache as T; } else { model = RedisHelper.GetStringKey <T>(key); if (model == null) { model = OQL.FromObject <T>().Select().Where((cmp, m) => cmp.Comparer(m.ID, "=", ID)).END.ToObject(); if (model != null) { RedisHelper.SetStringKey <T>(key, model, DateTime.Now.AddDays(7) - DateTime.Now); } } if (model != null) { //更新本地缓存 mc.Set(key, model, cip); } } } else { model = OQL.FromObject <T>().Select().Where((cmp, m) => cmp.Comparer(m.ID, "=", ID)).END.ToObject(); } return(model); }
/// <summary> /// 注意:更新方法的调用要确保model不是缓存得到的,否则缓存数据会覆盖掉数据库数据 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="model"></param> /// <param name="IsUseCache"></param> /// <returns></returns> public static bool Update <T>(T model, bool IsUseCache = false) where T : EntityBase, new() { System.Reflection.PropertyInfo[] ps = model.GetType().GetProperties(); foreach (System.Reflection.PropertyInfo pi in ps) { //Name 为属性名称,GetValue 得到属性值(参数this 为对象本身,null) string name = pi.Name.ToLower(); if (name == "TenantId".ToLower()) { pi.SetValue(model, TenantId, null); } else if (name == "UpdateId".ToLower()) { pi.SetValue(model, AdminId, null); } else if (name == "UpdateUser".ToLower()) { pi.SetValue(model, AdminName, null); } else if (name == "UpdateIP".ToLower()) { pi.SetValue(model, Util.GetLocalIP(), null); } else if (name == "UpdateTime".ToLower()) { pi.SetValue(model, DateTime.Now, null); } } EntityQuery <T> q = new EntityQuery <T>(); int count = q.Update(model); if (RedisHelper.IsUseCache && IsUseCache && (model is ICacheEvent)) { ICacheEvent im = model as ICacheEvent; string[] cks = im.GetCacheKeys(); string rule = im.GetCacheKeyRule(); MemoryCache mc = MemoryCache.Default; CacheItemPolicy cip = new CacheItemPolicy(); cip.AbsoluteExpiration = DateTimeOffset.Now.AddHours(6); foreach (var item in cks) { string key = string.Format(rule, item, model[item]); mc.Set(key, model, cip); RedisHelper.SetStringKey <T>(key, model, DateTime.Now.AddDays(7) - DateTime.Now); } } return(count > 0); }
public TrafficStatistService( IDbContext dbContext, IGenericRepository <TrafficStatist> trafficStatistRepository, ICache cache, ICacheEvent cacheEvent) { this._dbContext = dbContext; this._trafficStatistRepository = trafficStatistRepository; this._cacheEvent = cacheEvent; this._cache = cache; }
public RequestLogService( IDbContext dbContext, IGenericRepository <RequestLog> requestLogRepository, ICache cache, ICacheEvent cacheEvent) { this._dbContext = dbContext; this._requestLogRepository = requestLogRepository; this._cacheEvent = cacheEvent; this._cache = cache; }
public UserService( IDbContext dbContext, IGenericRepository <User> userRepository, IMemoryCache memoryCache, ICache cache, ICacheEvent cacheEvent) { _dbContext = dbContext; _userRepository = userRepository; _cacheEvent = cacheEvent; _cache = cache; }
private ICacheEvent DuplicateEvent(ICacheEvent cacheEvent) { SettableCacheEvent copyEvent = SettableCacheEvent.Obtain(); copyEvent.SetCacheKey(cacheEvent.CacheKey); copyEvent.SetCacheLimit(cacheEvent.CacheLimit); copyEvent.SetCacheSize(cacheEvent.CacheSize); copyEvent.SetEvictionReason(cacheEvent.EvictionReason); copyEvent.SetException(cacheEvent.Exception); copyEvent.SetItemSize(cacheEvent.ItemSize); copyEvent.SetResourceId(cacheEvent.ResourceId); return(copyEvent); }
public ResponseLogService( IDbContext dbContext, IGenericRepository <ResponseSnap> responseSnapRepository, IGenericRepository <SqlSnap> sqlSnapRepository, IGenericRepository <ExceptionSnap> exceptionSnapRepository, IGenericRepository <TrackSnap> trackSnapRepository, ICache cache, ICacheEvent cacheEvent) { this._dbContext = dbContext; this._responseSnapRepository = responseSnapRepository; this._sqlSnapRepository = sqlSnapRepository; this._exceptionSnapRepository = exceptionSnapRepository; this._trackSnapRepository = trackSnapRepository; this._cacheEvent = cacheEvent; this._cache = cache; }
public DeviceService( IGenericRepository <Device> deviceRepository, IGenericRepository <DeviceSms> deviceSmsRepository, IGenericRepository <User> userRepository, IDbContext dbContext, ICache cache, ICacheEvent cacheEvent, ILogger <DeviceService> logger) { _deviceRepository = deviceRepository; _deviceSmsRepository = deviceSmsRepository; _userRepository = userRepository; _logger = logger; _cacheEvent = cacheEvent; _cache = cache; _dbContext = dbContext; }
/// <summary> /// Do nothing. /// </summary> public void OnWriteAttempt(ICacheEvent cacheEvent) { }
public void OnMiss(ICacheEvent cacheEvent) { _cacheEvents["OnMiss"].Add(DuplicateEvent(cacheEvent)); }
public void OnWriteAttempt(ICacheEvent cacheEvent) { _cacheEvents["OnWriteAttempt"].Add(DuplicateEvent(cacheEvent)); }
public void OnWriteSuccess(ICacheEvent cacheEvent) { _cacheEvents["OnWriteSuccess"].Add(DuplicateEvent(cacheEvent)); }
public void OnWriteException(ICacheEvent cacheEvent) { _cacheEvents["OnWriteException"].Add(DuplicateEvent(cacheEvent)); }
public void OnEviction(ICacheEvent cacheEvent) { _cacheEvents["OnEviction"].Add(DuplicateEvent(cacheEvent)); }
/// <summary> /// Do nothing. /// </summary> public void OnEviction(ICacheEvent cacheEvent) { }
/// <summary> /// Do nothing. /// </summary> public void OnWriteException(ICacheEvent cacheEvent) { }
/// <summary> /// Do nothing. /// </summary> public void OnReadException(ICacheEvent cacheEvent) { }
/// <summary> /// Do nothing. /// </summary> public void OnWriteSuccess(ICacheEvent cacheEvent) { }
public void OnHit(ICacheEvent cacheEvent) { _cacheEvents["OnHit"].Add(DuplicateEvent(cacheEvent)); }
/// <summary> /// Do nothing. /// </summary> public void OnMiss(ICacheEvent cacheEvent) { }
/// <summary> /// Do nothing. /// </summary> public void OnHit(ICacheEvent cacheEvent) { }