Exemple #1
0
 public DbSet <TEntity> CreateSet(DbConfig config, DbMode mode)
 {
     if (_dbContext == null)
     {
         _dbContext = _contextFactory.Create(_dbFactory.GetDbInitContext(typeof(TEntity), mode, config));
     }
     return(_dbContext.Set <TEntity>());
 }
Exemple #2
0
        public void SetModify(TEntity entity, DbMode mode)
        {
            if (_dbContext == null)
            {
                return;
            }

            _dbContext.Entry(entity).State = EntityState.Modified;
        }
Exemple #3
0
        /// <summary>
        /// 创建ef的dbSet
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <returns></returns>
        public DbSet <TEntity> CreateSet(DbConfig config, DbMode mode)
        {
            var dbContext = _contextFactory.Create(_dbFactory.GetDbInitContext(typeof(TEntity), mode, config));

            if (!_dbContexts.Contains(dbContext) && mode.HasFlag(DbMode.Write))
            {
                _dbContexts.Add(dbContext);
            }
            return(dbContext.Set <TEntity>());
        }
Exemple #4
0
        /// <summary>
        /// 设置更改
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <param name="entity"></param>
        /// <param name="mode"></param>
        public void SetModify(TEntity entity, DbMode mode)
        {
            var dbContext = _contextFactory.Create(_dbFactory.GetDynamicDbInitContext(typeof(TEntity), mode, entity.Id));

            if (!_dbContexts.Contains(dbContext))
            {
                _dbContexts.Add(dbContext);
            }
            dbContext.Entry(entity).State = EntityState.Modified;
        }
Exemple #5
0
        public DbInitContext GetDbInitContext(Type type, DbMode mode, DbConfig dbConfig)
        {
            if (!TypeDbMapping.ContainsKey(type))
            {
                throw new NotFoundException($"未找到{type}对应的数据模块");
            }

            var dbModule = TypeDbMapping[type];

            return(new DbInitContext(dbConfig, dbModule, mode));
        }
Exemple #6
0
        /// <summary>
        /// 基础仓储
        /// </summary>
        protected BaseRepository()
        {
            var sqlConfig = Ioc.GetService <ISqlConfig>();

            if (sqlConfig.ReadSqlConnectionString.IsEmpty())
            {
                DbMode = DbMode.Single;
            }
            else
            {
                DbMode = DbMode.Separate;
            }
            UserContext = Ioc.GetService <IUserContext>();
        }
Exemple #7
0
        //Определяет _fileTypeStr и _templatePath
        private void DefineConstants(DbMode dbMode)
        {
            string itd = Different.GetInfoTaskDir();

            switch (dbMode)
            {
            case DbMode.Project:
                _fileTypeStr  = "Проект";
                _templatePath = itd + @"General\ProjectTemplate.accdb";
                break;

            case DbMode.Imit:
                _fileTypeStr  = "Файл имитационных данных";
                _templatePath = itd + @"General\ImitDataTemplate.accdb";
                break;

            case DbMode.Archive:
            case DbMode.ArchiveSQL:
                _fileTypeStr  = "Архив";
                _templatePath = itd + @"Providers\Archives\CalcArchiveTemplate.accdb";
                break;

            case DbMode.ControllerData:
                _fileTypeStr  = "Файл данных контроллера";
                _templatePath = itd + @"Tmp\ControllerDataTemplate.accdb";
                break;

            case DbMode.ReporterData:
                _fileTypeStr  = "Файл данных построителя отчетов";
                _templatePath = itd + @"Tmp\ReporterDataTemplate.accdb";
                break;

            case DbMode.AnalyzerAppData:
                _fileTypeStr  = "Файл данных анализатора";
                _templatePath = itd + @"Tmp\AppDataTemplate.accdb";
                break;

            case DbMode.ConstructorAppData:
                _fileTypeStr  = "Файл данных конструктора расчетов";
                _templatePath = itd + @"Tmp\AppDataTemplate.accdb";
                break;
            }
        }
Exemple #8
0
        //Сравниваем версии базы данных и текущего ПО
        //Возвращает: -1 - ошибка, 0 - версии одинаковы, 1 - нужно обновлять, страые версии ПО совместимы, 2 - старые версии ПО не совместимы
        private int VersionStatus(string dbPath, DbMode dbMode)
        {
            try
            {
                PrepareDelegates(dbMode);
                if (_delegates.Count == 0)
                {
                    return(0);
                }
                using (var sys = new SysTabl(dbPath))
                    _dbVersion = new Version(sys.SubValue("AppOptions", "AppVersion"), sys.SubValue("AppOptions", "AppVersionDate"));

                if (_delegates.Last().Version <= _dbVersion)
                {
                    return(0);
                }
                return(_delegates.Exists(x => x.Version > _dbVersion && !x.IsBack) ? 2 : 1);
            }
            catch { return(-1); }
        }
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="conn">连接字符串</param>
 public _DbHelper(string conn)
 {
     _connStr = conn;
     if (ConfigurationManager.AppSettings["DBMode"].ToUpper() == "MSSQL") { _dbMode = DbMode.MSSQL; }
     else { _dbMode = DbMode.Access; }
 }
Exemple #10
0
 protected virtual B GetContext(DbMode mode)
 {
     return(mode == DbMode.ReadWrite ? writer : reader);
 }
 protected IDbConnection GetDbConnection(DbMode model)
 {
     return(ContextFactory.GetConnection(DbFactory.GetStaticDbInitContext(typeof(TEntity), model)));
 }
Exemple #12
0
 protected IDbConnection GetDbConnection(short number, DbMode model)
 {
     return(ContextFactory.GetConnection(DbFactory.GetDynamicDbInitContext(typeof(TEntity), model, number)));
 }
Exemple #13
0
 protected ISql GetSqlExetuator(short number, DbMode model)
 {
     return(ContextFactory.GetSqlExetuator(GetDbConnection(number, model)));
 }
Exemple #14
0
 /// <summary>
 /// 可以写,对读无限制
 /// </summary>
 /// <param name="mode"></param>
 /// <returns></returns>
 public static bool CanWrite(this DbMode mode)
 {
     return(mode.HasFlag(DbMode.Write));
 }
Exemple #15
0
 /// <summary>
 /// 可以读,对写入无限制
 /// </summary>
 /// <param name="mode"></param>
 /// <returns></returns>
 public static bool CanRead(this DbMode mode)
 {
     return(mode.HasFlag(DbMode.Read));
 }
Exemple #16
0
        //Обновляет указаный файл указанного типа то текущей версии, silentMode - не выводить сообщение о несовместимости
        private string UpdateVersion(DbMode dbmode, string dbPath, bool silentMode)
        {
            try
            {
                if (dbPath.IsEmpty())
                {
                    return("");
                }
                var dbFile = new FileInfo(dbPath);
                if (!dbFile.Exists)
                {
                    return("");
                }
                int status = VersionStatus(dbPath, dbmode);
                DefineConstants(dbmode);
                string mess = _fileTypeStr + " " + dbPath + " имеет устаревшую версию. ";
                if (status <= 0)
                {
                    return("");
                }
                if (status == 2 && !silentMode && !Different.MessageQuestion("В случае обновления данный файл будет некорректно работать на более старых версиях системы InfoTask\nОбновить версию файла автоматически?"))
                {
                    return("");
                }
                var tmpPath = dbFile.Directory + @"\tmp__" + dbFile.Name;
                try { dbFile.CopyTo(tmpPath, true); }
                catch
                {
                    Different.MessageError(mess += "\nНе удается скопировать файл в " + tmpPath);
                    return(mess);
                }
                using (_db = new DaoDb(tmpPath))
                    foreach (var d in _delegates)
                    {
                        if (d.Version > _dbVersion)
                        {
                            try
                            {
                                d.Action();
                                _dbVersion = d.Version;
                            }
                            catch (Exception ex)
                            {
                                return(ex.MessageError(mess + "\nОшибка обновления файла"));
                            }
                        }
                    }
                using (var sys = new SysTabl(tmpPath))
                {
                    sys.PutSubValue("AppOptions", "AppVersionDate", _dbVersion.Date);
                    sys.PutSubValue("AppOptions", "AppVersion", _dbVersion.ToString());
                }

                var tmpFile = new FileInfo(tmpPath);
                try
                {
                    dbFile.Delete();
                    Thread.Sleep(300);
                    tmpFile.CopyTo(dbPath, true);
                }
                catch
                {
                    Different.MessageError(mess += "При обновлении произошла ошибка, файл занят. Файл не был обновлен. Обновленная версия содержится в файле " + @"\tmp__" + dbFile.Name);
                    return(mess);
                }
                try
                {
                    Thread.Sleep(400);
                    tmpFile.Delete();
                }
                catch (Exception ex)
                {
                    ex.MessageError("");
                }
                return("");
            }
            finally { GC.Collect(); }
        }
Exemple #17
0
        //Подготовка списка обновлений для указанного типа файлов
        private void PrepareDelegates(DbMode dbMode)
        {
            _delegates = new List <UpdateDelegate>();
            switch (dbMode)
            {
            case DbMode.Project:
                AddAction(Update_1_0_1, "1.0.1", "10.10.2012");
                AddAction(Update_1_0_2, "1.0.2", "26.10.2012", false);
                AddAction(Update_1_0_3, "1.0.3", "08.11.2012");
                AddAction(Update_1_0_4, "1.0.4", "15.11.2012", false);
                AddAction(Update_1_0_5, "1.0.5", "26.11.2012");
                AddAction(Update_1_0_6, "1.0.6", "27.11.2012");
                AddAction(Update_1_0_7, "1.0.7", "05.12.2012");
                AddAction(Update_1_0_8, "1.0.8", "23.01.2012");
                AddAction(Update_1_0_9, "1.0.9", "29.05.2013");
                AddAction(Update_1_0_10, "1.0.10", "20.06.2013");
                AddAction(Update_1_1_0, "1.1.0", "27.06.2013");
                AddAction(Update_1_1_1, "1.1.1", "03.07.2013");
                AddAction(Update_1_1_2, "1.1.2", "23.07.2013");
                AddAction(Update_1_1_3, "1.1.3", "30.07.2013");
                AddAction(Update_1_1_4, "1.1.4", "26.08.2013");
                AddAction(Update_1_1_5, "1.1.5", "19.09.2013");
                AddAction(Update_1_1_6, "1.1.6", "30.09.2013");
                AddAction(Update_1_2_1, "1.2.1", "09.12.2013");
                AddAction(Update_1_2_2, "1.2.2", "18.02.2014");
                AddAction(Update_1_2_3, "1.2.3", "08.04.2014");
                AddAction(Update_1_2_4, "1.2.4", "07.05.2014");
                AddAction(Update_1_3_0, "1.3.0", "16.06.2014");
                AddAction(Update_1_3_1, "1.3.1", "29.07.2014");
                AddAction(Update_1_3_2, "1.3.2", "25.08.2014");
                AddAction(Update_1_3_3, "1.3.3", "30.10.2014");
                AddAction(Update_1_3_4, "1.3.4", "31.10.2014");
                AddAction(Update_1_3_5, "1.3.5", "06.11.2014");
                AddAction(Update_1_3_6, "1.3.6", "06.11.2014");
                AddAction(Update_1_3_7, "1.3.7", "07.07.2015");
                AddAction(Update_1_3_8, "1.3.8", "01.09.2015");
                AddAction(Update_1_3_9, "1.3.9", "11.09.2015");
                AddAction(Update_1_3_10, "1.3.10", "16.09.2015");
                AddAction(Update_1_3_11, "1.3.11", "29.09.2015");
                AddAction(Update_1_3_12, "1.3.12", "30.09.2015");
                AddAction(Update_1_3_13, "1.3.13", "04.10.2015");
                AddAction(Update_1_3_14, "1.3.14", "05.10.2015");
                AddAction(Update_1_3_15, "1.3.15", "23.11.2015");
                AddAction(Update_1_3_16, "1.3.16", "13.01.2016");
                AddAction(Update_1_3_17, "1.3.17", "17.02.2016");
                break;

            case DbMode.Imit:
                AddAction(UpdateImit_1_2_0, "1.2.0", "04.12.2013");
                AddAction(UpdateImit_1_3_0, "1.3.0", "11.09.2015");
                break;

            case DbMode.Clone:
                AddAction(UpdateClone_1_3_0, "1.3.0", "11.09.2015");
                AddAction(UpdateClone_1_3_1, "1.3.1", "30.09.2015");
                break;

            case DbMode.AnalyzerAppData:
                AddAction(UpdateAnalyzer_1_3_0, "1.3.0", "11.09.2015");
                break;

            case DbMode.ConstructorAppData:
                break;

            case DbMode.ControllerData:
                AddAction(UpdateController_1_2_0, "1.2.0", "02.12.2013");
                AddAction(UpdateController_1_2_1, "1.2.1", "20.02.2014");
                AddAction(UpdateController_1_3_0, "1.3.0", "11.09.2015");
                AddAction(UpdateController_1_3_1, "1.3.1", "12.02.2016");
                AddAction(UpdateController_1_3_3, "1.3.3", "27.02.2017");
                AddAction(UpdateController_1_3_4, "1.3.4", "07.09.2017");
                break;

            case DbMode.ReporterData:
                AddAction(UpdateReporter_1_2_0, "1.2.0", "30.01.2014");
                AddAction(UpdateReporter_1_3_0, "1.3.0", "11.09.2015");
                break;

            case DbMode.Archive:
                AddAction(UpdateArchive_1_1_0, "1.1.0", "01.08.2013");
                AddAction(UpdateArchive_1_3_0, "1.3.0", "09.06.2014");
                AddAction(UpdateArchive_1_3_1, "1.3.1", "11.09.2015");
                AddAction(UpdateArchive_1_3_2, "1.3.2", "01.02.2016");
                AddAction(UpdateArchive_1_3_3, "1.3.3", "03.02.2016");
                break;

            case DbMode.ArchiveSQL:
                break;
            }
        }
Exemple #18
0
        /// <summary>
        /// 只写入
        /// </summary>
        /// <param name="mode"></param>
        /// <returns></returns>

        public static bool IsWriteOnly(this DbMode mode)
        {
            return(mode.HasFlag(DbMode.Write) && !mode.HasFlag(DbMode.Read));
        }
Exemple #19
0
        public DbInitContext GetStaticDbInitContext(Type type, DbMode mode)
        {
            var dbConfig = GetStaticDbConfig(type);

            return(GetDbInitContext(type, mode, dbConfig));
        }
Exemple #20
0
 /// <summary>
 /// 可以同事读写
 /// </summary>
 /// <param name="mode"></param>
 /// <returns></returns>
 public static bool IsReadAndWrite(this DbMode mode)
 {
     return(mode.HasFlag(DbMode.Read) && mode.HasFlag(DbMode.Write));
 }
Exemple #21
0
        public DbInitContext GetDynamicDbInitContext(Type type, DbMode mode, short number)
        {
            var dbConfig = GetDynamicDbConfig(type, number);

            return(GetDbInitContext(type, mode, dbConfig));
        }
Exemple #22
0
 protected ISql GetSqlExetuator(string coden, DbMode model)
 {
     return(ContextFactory.GetSqlExetuator(GetDbConnection(coden, model)));
 }
Exemple #23
0
        public DbInitContext GetDynamicDbInitContext(Type type, DbMode mode, long id)
        {
            var dbConfig = GetDynamicDbConfig(type, id);

            return(GetDbInitContext(type, mode, dbConfig));
        }
Exemple #24
0
 protected IDbConnection GetDbConnection(string coden, DbMode model)
 {
     return(ContextFactory.GetConnection(DbFactory.GetDynamicDbInitContext(typeof(TEntity), model, coden)));
 }
Exemple #25
0
        public DbInitContext GetDynamicDbInitContext(Type type, DbMode mode, string coden)
        {
            var dbConfig = GetDynamicDbConfig(type, new SampleRouter(coden));

            return(GetDbInitContext(type, mode, dbConfig));
        }
 protected ISql GetSqlExetuator(DbMode model)
 {
     return(ContextFactory.GetSqlExetuator(GetDbConnection(model)));
 }
Exemple #27
0
 public DbInitContext(DbConfig config, DbModule module, DbMode mode)
 {
     Mode   = mode;
     Config = config;
     Module = module;
 }