public DbSet <TEntity> CreateSet(DbConfig config, DbMode mode) { if (_dbContext == null) { _dbContext = _contextFactory.Create(_dbFactory.GetDbInitContext(typeof(TEntity), mode, config)); } return(_dbContext.Set <TEntity>()); }
public void SetModify(TEntity entity, DbMode mode) { if (_dbContext == null) { return; } _dbContext.Entry(entity).State = EntityState.Modified; }
/// <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>()); }
/// <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; }
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)); }
/// <summary> /// 基础仓储 /// </summary> protected BaseRepository() { var sqlConfig = Ioc.GetService <ISqlConfig>(); if (sqlConfig.ReadSqlConnectionString.IsEmpty()) { DbMode = DbMode.Single; } else { DbMode = DbMode.Separate; } UserContext = Ioc.GetService <IUserContext>(); }
//Определяет _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; } }
//Сравниваем версии базы данных и текущего ПО //Возвращает: -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; } }
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))); }
protected IDbConnection GetDbConnection(short number, DbMode model) { return(ContextFactory.GetConnection(DbFactory.GetDynamicDbInitContext(typeof(TEntity), model, number))); }
protected ISql GetSqlExetuator(short number, DbMode model) { return(ContextFactory.GetSqlExetuator(GetDbConnection(number, model))); }
/// <summary> /// 可以写,对读无限制 /// </summary> /// <param name="mode"></param> /// <returns></returns> public static bool CanWrite(this DbMode mode) { return(mode.HasFlag(DbMode.Write)); }
/// <summary> /// 可以读,对写入无限制 /// </summary> /// <param name="mode"></param> /// <returns></returns> public static bool CanRead(this DbMode mode) { return(mode.HasFlag(DbMode.Read)); }
//Обновляет указаный файл указанного типа то текущей версии, 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(); } }
//Подготовка списка обновлений для указанного типа файлов 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; } }
/// <summary> /// 只写入 /// </summary> /// <param name="mode"></param> /// <returns></returns> public static bool IsWriteOnly(this DbMode mode) { return(mode.HasFlag(DbMode.Write) && !mode.HasFlag(DbMode.Read)); }
public DbInitContext GetStaticDbInitContext(Type type, DbMode mode) { var dbConfig = GetStaticDbConfig(type); return(GetDbInitContext(type, mode, dbConfig)); }
/// <summary> /// 可以同事读写 /// </summary> /// <param name="mode"></param> /// <returns></returns> public static bool IsReadAndWrite(this DbMode mode) { return(mode.HasFlag(DbMode.Read) && mode.HasFlag(DbMode.Write)); }
public DbInitContext GetDynamicDbInitContext(Type type, DbMode mode, short number) { var dbConfig = GetDynamicDbConfig(type, number); return(GetDbInitContext(type, mode, dbConfig)); }
protected ISql GetSqlExetuator(string coden, DbMode model) { return(ContextFactory.GetSqlExetuator(GetDbConnection(coden, model))); }
public DbInitContext GetDynamicDbInitContext(Type type, DbMode mode, long id) { var dbConfig = GetDynamicDbConfig(type, id); return(GetDbInitContext(type, mode, dbConfig)); }
protected IDbConnection GetDbConnection(string coden, DbMode model) { return(ContextFactory.GetConnection(DbFactory.GetDynamicDbInitContext(typeof(TEntity), model, coden))); }
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))); }
public DbInitContext(DbConfig config, DbModule module, DbMode mode) { Mode = mode; Config = config; Module = module; }