/// <summary> /// 更换数据库, 数据表映射使用传入的映射规则 /// </summary> /// <param name="connStr">新的数据库连接字符串</param> /// <param name="rules">映射规则</param> /// <exception cref="ArgumentException">type类型不支持</exception> public void ChangeDataBase(string connStr, List <TableMappingRule> rules) { // close var accessor = BaseAccessor; if (!accessor.IsClose()) { accessor.Close(); } // new base accessor accessor = new BaseDataAccessor(); lock (LockObj) { var context = accessor.GetDbContext(); // change connection context.Database.GetDbConnection().ConnectionString = connStr; foreach (var rule in rules) { GetTableName(rule.MappingType, accessor); // get table name string tableNm = rule.Mapper.GetMappingTableName(rule.MappingType, rule.Condition); if (context.Model.FindEntityType(rule.MappingType)?.Relational() is RelationalEntityTypeAnnotations relational) { relational.TableName = tableNm; } } } BaseAccessor = accessor; }
/// <summary> /// 更换数据库 /// </summary> /// <param name="connectString">新的数据库连接字符串</param> public void ChangeDataBase(string connectString) { // close var accessor = BaseAccessor; if (!accessor.IsClose()) { accessor.Close(); } // new base accessor accessor = new BaseDataAccessor(); accessor.GetDbContext().Database.GetDbConnection().ConnectionString = connectString; BaseAccessor = accessor; }
private TableAccessMapping GetTableName(Type mappingType, BaseDataAccessor helper) { var context = helper.GetDbContext(); var model = context.Model.FindEntityType(mappingType); if (model != null) { string table = model.Relational().TableName; return(new TableAccessMapping(mappingType, table)); } else { throw new ArgumentException("Mapping type not found"); } }
/// <summary> /// 根据条件改变多个传入类型的映射数据表(此操作会导致当前操作的context释放掉,调用前需确保context的内容已保存) /// </summary> /// <param name="rules">映射规则</param> /// <exception cref="ArgumentException">type类型不支持</exception> /// <returns>改变后的数据表映射</returns> public List <TableAccessMapping> ChangeMappingTables(List <TableMappingRule> rules) { List <TableAccessMapping> ret = new List <TableAccessMapping>(); if (rules != null) { lock (LockObj) { // close var accessor = BaseAccessor; if (!accessor.IsClose()) { accessor.Close(); } // new base accessor accessor = new BaseDataAccessor(); // set new mapping DynamicModelCacheKeyFactory.ChangeTableMapping(); var context = accessor.GetDbContext(); foreach (var rule in rules) { // check changeable var mapping = GetTableName(rule.MappingType, accessor); // get table name string tableNm = rule.Mapper.GetMappingTableName(rule.MappingType, rule.Condition); if (context.Model.FindEntityType(rule.MappingType)?.Relational() is RelationalEntityTypeAnnotations relational) { relational.TableName = tableNm; } else { tableNm = ""; } ret.Add(new TableAccessMapping(rule.MappingType, tableNm)); } // set value BaseAccessor = accessor; } } return(ret); }
/// <summary> /// 获取所有实体类的数据表映射结构体 /// </summary> /// <returns>映射关系集合</returns> public List <TableAccessMapping> GetTableNames() { BaseDataAccessor helper = BaseAccessor; var context = helper.GetDbContext(); List <TableAccessMapping> ret = new List <TableAccessMapping>(); var models = context.Model.GetEntityTypes(); foreach (var model in models) { string table = model.Relational().TableName; Type type = model.ClrType; TableAccessMapping mapping = new TableAccessMapping(type, table); ret.Add(mapping); } return(ret); }