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; }
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>())); } }
/// <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); }