コード例 #1
0
ファイル: BLLBase.cs プロジェクト: mingtiandejiyilkdy/lkdy
        /// <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);
        }
コード例 #2
0
ファイル: BLLBase.cs プロジェクト: mingtiandejiyilkdy/lkdy
        /// <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);
        }
コード例 #3
0
ファイル: BLLBase.cs プロジェクト: mingtiandejiyilkdy/lkdy
        /// <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);
        }
コード例 #4
0
 public TrafficStatistService(
     IDbContext dbContext,
     IGenericRepository <TrafficStatist> trafficStatistRepository,
     ICache cache,
     ICacheEvent cacheEvent)
 {
     this._dbContext = dbContext;
     this._trafficStatistRepository = trafficStatistRepository;
     this._cacheEvent = cacheEvent;
     this._cache      = cache;
 }
コード例 #5
0
 public RequestLogService(
     IDbContext dbContext,
     IGenericRepository <RequestLog> requestLogRepository,
     ICache cache,
     ICacheEvent cacheEvent)
 {
     this._dbContext            = dbContext;
     this._requestLogRepository = requestLogRepository;
     this._cacheEvent           = cacheEvent;
     this._cache = cache;
 }
コード例 #6
0
 public UserService(
     IDbContext dbContext,
     IGenericRepository <User> userRepository,
     IMemoryCache memoryCache,
     ICache cache,
     ICacheEvent cacheEvent)
 {
     _dbContext      = dbContext;
     _userRepository = userRepository;
     _cacheEvent     = cacheEvent;
     _cache          = cache;
 }
コード例 #7
0
            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);
            }
コード例 #8
0
 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;
 }
コード例 #9
0
 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;
 }
コード例 #10
0
 /// <summary>
 /// Do nothing.
 /// </summary>
 public void OnWriteAttempt(ICacheEvent cacheEvent)
 {
 }
コード例 #11
0
 public void OnMiss(ICacheEvent cacheEvent)
 {
     _cacheEvents["OnMiss"].Add(DuplicateEvent(cacheEvent));
 }
コード例 #12
0
 public void OnWriteAttempt(ICacheEvent cacheEvent)
 {
     _cacheEvents["OnWriteAttempt"].Add(DuplicateEvent(cacheEvent));
 }
コード例 #13
0
 public void OnWriteSuccess(ICacheEvent cacheEvent)
 {
     _cacheEvents["OnWriteSuccess"].Add(DuplicateEvent(cacheEvent));
 }
コード例 #14
0
 public void OnWriteException(ICacheEvent cacheEvent)
 {
     _cacheEvents["OnWriteException"].Add(DuplicateEvent(cacheEvent));
 }
コード例 #15
0
 public void OnEviction(ICacheEvent cacheEvent)
 {
     _cacheEvents["OnEviction"].Add(DuplicateEvent(cacheEvent));
 }
コード例 #16
0
 /// <summary>
 /// Do nothing.
 /// </summary>
 public void OnEviction(ICacheEvent cacheEvent)
 {
 }
コード例 #17
0
 /// <summary>
 /// Do nothing.
 /// </summary>
 public void OnWriteException(ICacheEvent cacheEvent)
 {
 }
コード例 #18
0
 /// <summary>
 /// Do nothing.
 /// </summary>
 public void OnReadException(ICacheEvent cacheEvent)
 {
 }
コード例 #19
0
 /// <summary>
 /// Do nothing.
 /// </summary>
 public void OnWriteSuccess(ICacheEvent cacheEvent)
 {
 }
コード例 #20
0
 public void OnHit(ICacheEvent cacheEvent)
 {
     _cacheEvents["OnHit"].Add(DuplicateEvent(cacheEvent));
 }
コード例 #21
0
 /// <summary>
 /// Do nothing.
 /// </summary>
 public void OnMiss(ICacheEvent cacheEvent)
 {
 }
コード例 #22
0
 /// <summary>
 /// Do nothing.
 /// </summary>
 public void OnHit(ICacheEvent cacheEvent)
 {
 }