/// <summary> /// Поставить все составы из прибытия системы КИС (перечень составов берется из таблицы учета прибытия из внутренихстанций системы КИС) /// </summary> /// <returns></returns> public int PutInputSostavToStation() { IQueryable <Oracle_InputSostav> list_noClose = ois.GetInputSostavNoClose(); if (list_noClose == null | list_noClose.Count() == 0) { return(0); } foreach (Oracle_InputSostav or_is in list_noClose.ToList()) //TODO: .ToList() добавлен чтобы небыло ошибок //Дело в том, что функция Where(Function()...) возвращает результат типа Linq.IQueryable(), который создает транзакцию, // которая в свою очередь остается открытой на все время исполнения запроса — на весь цикл перебора. А вызов метода db.SaveChanges() // спытается открыть новую транзакцию, при открытой предыдущей и это вызывает исключение. Чтобы «завершить» открытую транзакцию необходимо привести результат // к «конечному» типу, например Array или List(Of ...). Для этого необходимо изменить код: { Oracle_InputSostav kis_inp_sostav = new Oracle_InputSostav(); kis_inp_sostav = or_is; //Закрыть состав if (kis_inp_sostav.CountWagons != null & kis_inp_sostav.CountSetWagons != null & kis_inp_sostav.CountWagons == kis_inp_sostav.CountSetWagons) { kis_inp_sostav.Close = DateTime.Now; int res_close = ois.SaveOracle_InputSostav(kis_inp_sostav); } // Поставим состав на станции АМКР системы RailCars int res_put = transfer_rc.PutInputSostavToStation(ref kis_inp_sostav); //TODO: ВЫПОЛНИТЬ КОД: Поставим состав на станции АМКР системы RailWay //............................. } return(0); // TODO: исправить возврат }
public void Test_KIS_RC_Transfer_PutInputSostavToStation() { Oracle_InputSostav oris = ois.GetInputSostav(113); KIS_RC_Transfer kisrs = new KIS_RC_Transfer(); int res = kisrs.PutInputSostavToStation(ref oris); Console.WriteLine("Обновлено {0}", res); }
/// <summary> /// Получить последнюю дату /// </summary> /// <returns></returns> public DateTime?GetLastDateTime() { Oracle_InputSostav ois = GetInputSostav().OrderByDescending(i => i.DateTime).FirstOrDefault(); if (ois != null) { return(ois.DateTime); } return(null); }
/// <summary> /// Добавить или править /// </summary> /// <param name="Oracle_InputSostav"></param> /// <returns></returns> public int SaveOracle_InputSostav(Oracle_InputSostav Oracle_InputSostav) { Oracle_InputSostav dbEntry; if (Oracle_InputSostav.ID == 0) { dbEntry = new Oracle_InputSostav() { ID = 0, DateTime = Oracle_InputSostav.DateTime, DocNum = Oracle_InputSostav.DocNum, IDOrcStationFrom = Oracle_InputSostav.IDOrcStationFrom, WayNumFrom = Oracle_InputSostav.WayNumFrom, NaprFrom = Oracle_InputSostav.NaprFrom, IDOrcStationOn = Oracle_InputSostav.IDOrcStationOn, CountWagons = Oracle_InputSostav.CountWagons, CountSetWagons = Oracle_InputSostav.CountSetWagons, CountUpdareWagons = Oracle_InputSostav.CountUpdareWagons, Close = Oracle_InputSostav.Close, Status = Oracle_InputSostav.Status, Message = Oracle_InputSostav.Message }; context.Oracle_InputSostav.Add(dbEntry); } else { dbEntry = context.Oracle_InputSostav.Find(Oracle_InputSostav.ID); if (dbEntry != null) { dbEntry.DateTime = Oracle_InputSostav.DateTime; dbEntry.DocNum = Oracle_InputSostav.DocNum; dbEntry.IDOrcStationFrom = Oracle_InputSostav.IDOrcStationFrom; dbEntry.WayNumFrom = Oracle_InputSostav.WayNumFrom; dbEntry.NaprFrom = Oracle_InputSostav.NaprFrom; dbEntry.IDOrcStationOn = Oracle_InputSostav.IDOrcStationOn; dbEntry.CountWagons = Oracle_InputSostav.CountWagons; dbEntry.CountSetWagons = Oracle_InputSostav.CountSetWagons; dbEntry.CountUpdareWagons = Oracle_InputSostav.CountUpdareWagons; dbEntry.Close = Oracle_InputSostav.Close; dbEntry.Status = Oracle_InputSostav.Status; dbEntry.Message = Oracle_InputSostav.Message; } } try { context.SaveChanges(); } catch (Exception e) { LogRW.LogError(e, "SaveOracle_InputSostav", eventID); return(-1); } return(dbEntry.ID); }
/// <summary> /// Проверить изменения в количестве вагонов в составе /// </summary> /// <param name="o_is"></param> /// <param name="doc"></param> protected void CheckChangeExistInputSostav(Oracle_InputSostav o_is, int doc) { int count_vag = vc.GetCountSTPR1InStVag(doc); // Количество вагонов изменено if (o_is.CountWagons > 0 & count_vag > 0 & o_is.CountWagons != count_vag) { // Изменим количество вагонов и отправим на переустановку вагонов o_is.CountWagons = count_vag; o_is.Status = (int)statusSting.Update; o_is.Close = null; ois.SaveOracle_InputSostav(o_is); } }
/// <summary> /// Удалить /// </summary> /// <param name="ID"></param> /// <returns></returns> public Oracle_InputSostav DeleteOracle_InputSostav(int ID) { Oracle_InputSostav dbEntry = context.Oracle_InputSostav.Find(ID); if (dbEntry != null) { context.Oracle_InputSostav.Remove(dbEntry); try { context.SaveChanges(); } catch (Exception e) { LogRW.LogError(e, "DeleteOracle_InputSostav", eventID); return(null); } } return(dbEntry); }
/// <summary> /// Добавить сохранить /// </summary> /// <param name="Oracle_InputSostav"></param> /// <returns></returns> public int SaveOracle_InputSostav(Oracle_InputSostav Oracle_InputSostav) { return(this.rep_is.SaveOracle_InputSostav(Oracle_InputSostav)); }