예제 #1
0
 /// <summary>
 /// Блокировка
 /// </summary>
 /// <param name="type"></param>
 /// <param name="rowId"></param>
 /// <param name="millisecondTimeout"></param>
 /// <param name="codeToRun"></param>
 public static void Lock(Type type, int rowId, Action codeToRun, int millisecondTimeout = DefaultTimeout)
 {
     using (var bolt = new DataLocker(type, rowId, millisecondTimeout))
     {
         if (bolt.Safe)
         {
             codeToRun();
         }
         else
         {
             throw new TimeoutException(string.Format("Не удалось получить монопольный доступ к таблице {0}, к строке id: {1} в течение {2}мс",
                                                      type, rowId, millisecondTimeout));
         }
     }
 }
예제 #2
0
        /// <summary>
        /// Изменение данных трекера
        /// </summary>
        /// <param name="data">объект данных</param>
        public static void UpdateGpsData(DataGpsData data)
        {
            DataLocker.Lock(typeof(DataGpsData), data.Id, () =>
            {
                DataGpsData obj;
                using (var dc = new GpsTrackerDataContext())
                {
                    obj = (from _obj in dc.GpsData where _obj.Id == data.Id select _obj).FirstOrDefault();
                    if (obj == null)
                    {
                        throw new KeyNotFoundException(String.Format("{0}: Запись с таким id:{1} не найдена",
                                                                     MethodBase.GetCurrentMethod(), data.Id));
                    }
                }

                using (var dc = new GpsTrackerDataContext())
                {
                    dc.GpsData.Attach(data, obj);
                    dc.SubmitChanges();
                }
            });
        }