Beispiel #1
0
 /// <summary>
 /// Выполнить запрос/процедуру асинхронно.
 /// </summary>
 /// <typeparam name="TEntity"></typeparam>
 /// <param name="query">Запрос</param>
 /// <param name="cancellationToken">Токен отмены</param>
 /// <returns></returns>
 internal static async Task <TEntity[]> ExecSqlAsync <TEntity>(string query, CancellationToken cancellationToken)
     where TEntity : class
 {
     using (IDBSource source = new MKKContext()) {
         return(await((DbContext)source).Set <TEntity>().FromSqlRaw(query).ToArrayAsync(cancellationToken));
     }
 }
Beispiel #2
0
 /// <summary>
 /// Найти асинхронно клиента по ID из 1С.
 /// </summary>
 /// <param name="code1C">Код клиента</param>
 /// <param name="loggedMessage">Описание места и состоянии объекта вызвавшего исключение</param>
 /// <param name="cancellationToken">Токен отмены</param>
 /// <returns>Запись в БД</returns>
 internal static async Task <ClientDB> FindClientAndLogErrorAsync <TLoggedClass>(string code1C,
                                                                                 LoggedMessage <TLoggedClass> loggedMessage, CancellationToken cancellationToken) where TLoggedClass : class
 {
     using (IDBSource source = new MKKContext()) {
         return(await ClientDBQuery(source, code1C).SingleOrDefaultAndErrorAsync(loggedMessage, cancellationToken));
     }
 }
Beispiel #3
0
 /// <summary>
 /// Найти асинхронно договор по коду 1С.
 /// </summary>
 /// <param name="account1CCode">Номер договора</param>
 /// <param name="cancellationToken">Токен отмены</param>
 /// <param name="includes">Инклуды</param>
 /// <returns>Запись в БД</returns>
 internal static async Task <Account1C> FindAccountAsync(string account1CCode, CancellationToken cancellationToken,
                                                         params Expression <Func <Account1C, object> >[] includes)
 {
     using (IDBSource source = new MKKContext()) {
         return(await AccountDBQuery(source, account1CCode, includes).SingleOrDefaultAsync(cancellationToken));
     }
 }
Beispiel #4
0
 /// <summary>
 /// Выполнить запрос/процедуру асинхронно и при необходимости логировать ошибки.
 /// </summary>
 /// <typeparam name="TEntity">Результат выполнения запроса</typeparam>
 /// <typeparam name="TLoggedClass">Класс логируемого объекта</typeparam>
 /// <param name="query">Запрос</param>
 /// <param name="loggedMessage">Описание места и состоянии объекта вызвавшего исключение</param>
 /// <param name="cancellationToken">Токен отмены</param>
 /// <returns></returns>
 internal static async Task <TEntity[]> ExecSqlAndLogErrorAsync <TEntity, TLoggedClass>(string query,
                                                                                        LoggedMessage <TLoggedClass> loggedMessage, CancellationToken cancellationToken) where TEntity : class where TLoggedClass : class
 {
     using (IDBSource source = new MKKContext()) {
         return(await((MKKContext)source).Set <TEntity>().FromSqlRaw(query).
                ToArrayAndLogErrorAsync(loggedMessage, cancellationToken));
     }
 }
Beispiel #5
0
 /// <summary>
 /// Найти асинхронно договор по коду 1С.
 /// </summary>
 /// <typeparam name="TLoggedClass">Тип логируемого объекта</typeparam>
 /// <param name="account1CCode">Номер договора 1С</param>
 /// <param name="loggedMessage">Описание места и состоянии объекта вызвавшего исключение</param>
 /// <param name="cancellationToken">Токен отмены</param>
 /// <param name="includes">Инклуды</param>
 /// <returns></returns>
 internal static async Task <Account1C> FindAccountAndLogErrorAsync <TLoggedClass>(string account1CCode,
                                                                                   LoggedMessage <TLoggedClass> loggedMessage, CancellationToken cancellationToken,
                                                                                   params Expression <Func <Account1C, object> >[] includes) where TLoggedClass : class
 {
     using (IDBSource source = new MKKContext()) {
         return(await AccountDBQuery(source, account1CCode, includes).
                SingleOrDefaultAndErrorAsync(loggedMessage, cancellationToken));
     }
 }
Beispiel #6
0
 /// <summary>
 /// Получить описание файла по ID асинхронно.
 /// </summary>
 /// <param name="idFileDescription"></param>
 /// <param name="loggedMessage">Описание места и состоянии объекта вызвавшего исключение</param>
 /// <param name="cancellationToken">Токен отмены</param>
 /// <returns></returns>
 internal static async Task <FileDescriptionDB> FindFileDescriptionDBAndLogErrorAsync <TLoggedClass>(int idFileDescription,
                                                                                                     LoggedMessage <TLoggedClass> loggedMessage, CancellationToken cancellationToken) where TLoggedClass : class
 {
     using (IDBSource source = new MKKContext()) {
         return(await source.FileDescriptionDBs.
                AsNoTracking().
                Where(i => i.ID.Equals(idFileDescription)).
                SingleOrDefaultAndErrorAsync(loggedMessage, cancellationToken));
     }
 }
Beispiel #7
0
        /// <summary>
        /// Найти асинхронно клиента по ID из 1С.
        /// </summary>
        /// <param name="code1C">Код клиента</param>
        /// <param name="cancellationToken">Токен отмены</param>
        /// <returns>Запись в БД</returns>
        internal static async Task <ClientDB> FindClientAndLogErrorAsync <TLoggedClass>(string code1C,
                                                                                        CancellationToken cancellationToken) where TLoggedClass : class
        {
            using (IDBSource source = new MKKContext()) {
                ILogger <TLoggedClass>       logger        = LoggerFactory.CreateLogger <TLoggedClass>();
                LoggedMessage <TLoggedClass> loggedMessage =
                    new LoggedMessage <TLoggedClass>(logger, "Ошибка поиска клиента в БД./* Код клиента {client1CCode}.*/", code1C);

                return(await ClientDBQuery(source, code1C).SingleOrDefaultAndErrorAsync(loggedMessage, cancellationToken));
            }
        }
Beispiel #8
0
        /// <summary>
        /// Получить описание файла по ID асинхронно.
        /// </summary>
        /// <param name="idFileDescription"></param>
        /// <param name="cancellationToken">Токен отмены</param>
        /// <returns></returns>
        internal static async Task <FileDescriptionDB> FindFileDescriptionDBAndLogErrorAsync <TLoggedClass>(int idFileDescription,
                                                                                                            CancellationToken cancellationToken) where TLoggedClass : class
        {
            ILogger <TLoggedClass>       logger        = LoggerFactory.CreateLogger <TLoggedClass>();
            LoggedMessage <TLoggedClass> loggedMessage =
                new LoggedMessage <TLoggedClass>(logger, "Ошибка поиска описания файла в БД./* Код описания {idFileDescription}.*/", idFileDescription);

            using (IDBSource source = new MKKContext()) {
                return(await source.FileDescriptionDBs.
                       AsNoTracking().
                       Where(i => i.ID.Equals(idFileDescription)).
                       SingleOrDefaultAndErrorAsync(loggedMessage, cancellationToken));
            }
        }
Beispiel #9
0
        /// <summary>
        /// Найти объект по ID.
        /// </summary>
        /// <param name="id">ID объекта</param>
        /// <param name="includes">Инклуды</param>
        /// <returns>Запись в БД</returns>
        private static TEntity FindDBRecordByID <TEntity>(int id, params Expression <Func <TEntity, object> >[] includes)
            where TEntity : class, IDBTableID
        {
            using (IDBSource source = new MKKContext()) {
                IQueryable <TEntity> query = ((DbContext)source).Set <TEntity>().
                                             AsNoTracking().
                                             Where(i => i.ID.Equals(id));

                foreach (var include in includes)
                {
                    query = query.Include(include);
                }

                return(query.SingleOrDefault());
            }
        }
Beispiel #10
0
        /// <summary>
        /// Найти объект по ID.
        /// </summary>
        /// <param name="id">ID объекта</param>
        /// <param name="loggedMessage">Описание места и состоянии объекта вызвавшего исключение</param>
        /// <param name="cancellationToken">Токен отмены</param>
        /// <param name="includes">Инклуды</param>
        /// <returns>Запись в БД</returns>
        internal static async Task <TEntity> FindDBRecordByIDdAndLogErrorAsync <TEntity, TLoggedClass>(int id,
                                                                                                       LoggedMessage <TLoggedClass> loggedMessage, CancellationToken cancellationToken,
                                                                                                       params Expression <Func <TEntity, object> >[] includes) where TEntity : class, IDBTableID where TLoggedClass : class
        {
            using (IDBSource source = new MKKContext()) {
                IQueryable <TEntity> query = ((DbContext)source).Set <TEntity>().
                                             AsNoTracking().
                                             Where(i => i.ID.Equals(id));
                foreach (var include in includes)
                {
                    query = query.Include(include);
                }

                return(await query.SingleOrDefaultAndErrorAsync(loggedMessage, cancellationToken));
            }
        }
Beispiel #11
0
        /// <summary>
        /// Найти запись в БД по имени асинхронно. Если записи нет, то создать новую с Name = параметру name.
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <param name="name">Имя записи</param>
        /// <param name="cancellationToken">Токен отмены</param>
        /// <returns>Запись с искомым ID</returns>
        internal static async Task <TEntity> FindRequiredDBRecordByNameAsync <TEntity>(string name,
                                                                                       CancellationToken cancellationToken) where TEntity : class, IDBTableName, new()
        {
            using (IDBSource dbSource = new MKKContext()) {
                TEntity dbRecord = await GetSingleRecordByNameQuery <TEntity>(dbSource, name).
                                   SingleOrDefaultAsync(cancellationToken);

                if (dbRecord != default)
                {
                    return(dbRecord);
                }

                TEntity newRecord = new TEntity()
                {
                    Name = name
                };
                await((DbContext)dbSource).Set <TEntity>().AddAsync(newRecord, cancellationToken);
                await((DbContext)dbSource).SaveChangesAsync(cancellationToken);

                return(newRecord);
            }
        }
Beispiel #12
0
        /// <summary>
        /// Найти запись в БД по имени асинхронно. Если записи нет, то создать новую с Name = параметру name, Code1C = code1C.
        /// </summary>
        /// <typeparam name="TEntity">Таблица</typeparam>
        /// <typeparam name="TLoggedClass">Класс логируемого объекта</typeparam>
        /// <param name="name">Имя записи</param>
        /// <param name="code1C">Код 1С</param>
        /// <param name="loggedMessage">Описание места и состоянии объекта вызвавшего исключение</param>
        /// <param name="cancellationToken">Токен отмены</param>
        /// <returns>Запись с искомым ID</returns>
        internal static async Task <TEntity> FindRequiredDBRecordByNameAndLogErrorAsync <TEntity, TLoggedClass>(string name,
                                                                                                                string code1C, LoggedMessage <TLoggedClass> loggedMessage, CancellationToken cancellationToken)
            where TEntity : class, IDBTableIDNameW1CCode, new() where TLoggedClass : class
        {
            using (IDBSource dbSource = new MKKContext()) {
                TEntity dbRecord = await GetSingleRecordByNameQuery <TEntity>(dbSource, name).
                                   SingleOrDefaultAndErrorAsync(loggedMessage, cancellationToken);

                if (dbRecord == default)
                {
                    TEntity newRecord = new TEntity()
                    {
                        Name = name, Code1C = code1C
                    };

                    await((DbContext)dbSource).Set <TEntity>().AddAsync(newRecord, cancellationToken);
                    await dbSource.SaveChangesAndLogErrorAsync(loggedMessage, cancellationToken);

                    return(newRecord);
                }

                return(dbRecord);
            }
        }
Beispiel #13
0
 /// <summary>
 /// Найти договор по коду 1С.
 /// </summary>
 /// <param name="account1CCode">Код клиента</param>
 /// <param name="includes">Инклуды</param>
 /// <returns>Запись в БД</returns>
 internal static Account1C FindAccount(string account1CCode, params Expression <Func <Account1C, object> >[] includes)
 {
     using (IDBSource source = new MKKContext()) {
         return(AccountDBQuery(source, account1CCode, includes).SingleOrDefault());
     }
 }
Beispiel #14
0
 /// <summary>
 /// Найти клиента по ID из 1С.
 /// </summary>
 /// <param name="code1C">Код клиента</param>
 /// <returns>Запись в БД</returns>
 private static ClientDB FindClient(string code1C)
 {
     using (IDBSource source = new MKKContext()) {
         return(ClientDBQuery(source, code1C).SingleOrDefault());
     }
 }