Пример #1
0
        private static ItemType GetOrAdd(string caption, string uniqueKey, bool registerIfNoFound)
        {
            return(ItemTypes.GetOrAdd(uniqueKey, k =>
            {
                using (var db = new Db.DataContext())
                    using (var scope = db.CreateScope(TransactionScopeOption.Suppress))
                    {
                        var r = db.ItemType.Where(x => x.UniqueKey == uniqueKey).FirstOrDefault();
                        if (r == null && registerIfNoFound)
                        {
                            var r_ = new ItemType()
                            {
                                NameItemType = caption, UniqueKey = uniqueKey
                            };
                            db.ItemType.Add(r_);
                            db.SaveChanges();
                            r = r_;
                        }
                        if (r != null && r.NameItemType != caption)
                        {
                            r.NameItemType = caption;
                            db.SaveChanges();
                        }
                        ItemTypes[uniqueKey] = r;
                        return r;
                    }
            }));

            //var r = ItemTypes.Where(x => x.Value.UniqueKey == uniqueKey).Select(x => x.Value).FirstOrDefault();
            //if (r == null)
            //{
            //    using (var db = new Db.DataContext())
            //    using (var scope = db.CreateScope(TransactionScopeOption.Suppress))
            //    {
            //        r = db.ItemType.Where(x => x.UniqueKey == uniqueKey).FirstOrDefault();
            //        if (r == null && registerIfNoFound)
            //        {
            //            var r_ = new ItemType() { NameItemType = caption, UniqueKey = uniqueKey };
            //            db.ItemType.Add(r_);
            //            db.SaveChanges();
            //            r = r_;
            //        }
            //        if (r != null && r.NameItemType != caption)
            //        {
            //            r.NameItemType = caption;
            //            db.SaveChanges();
            //        }
            //        ItemTypes[uniqueKey] = r;
            //    }
            //}

            //return r;
        }
Пример #2
0
        private static Tuple <DateTime, ConcurrentDictionary <string, ItemType> > ItemsTypesProvide()
        {
            try
            {
                var types = new ConcurrentDictionary <string, ItemType>();

                using (var db = new Db.DataContext())
                {
                    db.ItemType.Where(x => !string.IsNullOrEmpty(x.UniqueKey)).ForEach(x => types[x.UniqueKey] = x);
                }

                var expires = DateTime.Now.AddMinutes(2);

                //Debug.WriteLineNoLog("ItemTypeFactory: generate new cache with {0} types, expires at {1}", types.Count, expires.ToString("yyyy-MM-dd HH:mm:ss"));

                return(new Tuple <DateTime, ConcurrentDictionary <string, ItemType> >(DateTime.Now.AddMinutes(2), types));
            }
            catch
            {
                return(new Tuple <DateTime, ConcurrentDictionary <string, ItemType> >(DateTime.Now, new ConcurrentDictionary <string, ItemType>()));
            }
        }
Пример #3
0
        /// <summary>
        /// Возвращает тип объектов для идентификатора <paramref name="type"/>.
        /// </summary>
        /// <param name="type">Идентификатор, для которого следует получить тип объектов.</param>
        public static ItemType GetItemType(int type)
        {
            if (type <= 0)
            {
                return(NotFound);
            }

            var _r = ItemTypes.Where(x => x.Value.IdItemType == type).Select(x => x.Value).FirstOrDefault();

            if (_r == null)
            {
                using (var db = new Db.DataContext())
                    using (var scope = db.CreateScope(TransactionScopeOption.Suppress))
                        _r = db.ItemType.Where(x => x.IdItemType == type).FirstOrDefault();
            }

            if (_r != null)
            {
                return(_r);
            }

            return(NotFound);
        }