public List<String> CheckMappingTableIsExist( IDbCommand cmd, String db, List<String> existTables, MappingClass mapping ) { foreach (DictionaryEntry entry in mapping.ClassList) { EntityInfo entity = entry.Value as EntityInfo; if (entity.Database.Equals( db ) == false) continue; if (!isTableCreated( existTables, entity )) { existTables = createTable( entity, cmd, existTables, mapping.ClassList ); } } return existTables; }
public void CheckTable( MappingClass mapping, String db ) { logger.Info( "[mysql] begin check table" ); IDbConnection connection = DataFactory.GetConnection( _connectionString, this.DatabaseType ); connection.Open(); IDbCommand cmd = connection.CreateCommand(); cmd.CommandText = "show tables"; IDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { existTables.Add( reader[0].ToString() ); logger.Info( "table found��" + reader[0].ToString() ); } reader.Close(); existTables = new MySqlTableBuilder().CheckMappingTableIsExist( cmd, db, existTables, mapping ); connection.Close(); }
private static void cacheInterceptor(MappingClass map) { List <object> interceptor = DbConfig.Instance.Interceptor; for (int i = 0; i < interceptor.Count; i++) { Dictionary <String, object> info = interceptor[i] as Dictionary <String, object>; String asmName = info["AssemblyName"].ToString(); String typeName = info["TypeFullName"].ToString(); IInterceptor obj = rft.GetInstance(asmName, typeName) as IInterceptor; if (obj == null) { throw new Exception("load ORM interceptor error( Assembly:" + asmName + ", Type:" + typeName + ")"); } map.InterceptorList.Add(obj); } }
public void CheckTable( MappingClass mapping, String db ) { logger.Info( "[access] begin check table" ); OleDbConnection connection = DataFactory.GetConnection( _connectionString, this.DatabaseType ) as OleDbConnection; connection.Open(); IDbCommand cmd = new OleDbCommand(); cmd.Connection = connection; object[] restrictions = new object[4]; restrictions[3] = "TABLE"; DataTable oleDbSchemaTable = connection.GetOleDbSchemaTable( OleDbSchemaGuid.Tables, restrictions ); foreach (DataRow row in oleDbSchemaTable.Rows) { existTables.Add( row["TABLE_NAME"].ToString() ); logger.Info( "table found��" + row["TABLE_NAME"].ToString() ); } existTables = new AccessTableBuilder().CheckMappingTableIsExist( cmd, db, existTables, mapping ); connection.Close(); }
public void CheckTable( MappingClass mapping, String db ) { logger.Info( "[sqlserver] begin check table" ); SqlConnection connection = new SqlConnection( _connectionString ); connection.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = connection; cmd.CommandText = "SELECT OBJECT_NAME(id) as name FROM sysobjects WHERE xtype='U' AND OBJECTPROPERTY(id, 'IsMSShipped') = 0"; SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { existTables.Add( reader["name"].ToString() ); logger.Info( "table found:" + reader["name"].ToString() ); } reader.Close(); existTables = new SqlServerTableBuilder().CheckMappingTableIsExist( cmd, db, existTables, mapping ); connection.Close(); }
public void CheckTable( MappingClass mapping, String db ) { logger.Info( "[MySQL] 加载数据库已有表" ); IDbConnection connection = DataFactory.GetConnection(_connectionString, this.DatabaseType); connection.Open(); OrmHelper.initCount++; LogManager.GetLogger("Class:System.Data.MysqlDatabaseChecker Method:CheckTable").Info("数据库连接已开启【" + OrmHelper.initCount + "】"); IDbCommand cmd = connection.CreateCommand(); cmd.CommandText = "show tables"; IDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { existTables.Add( reader[0].ToString() ); logger.Info( "加载表:" + reader[0].ToString() ); } reader.Close(); existTables = new MySqlTableBuilder().CheckMappingTableIsExist( cmd, db, existTables, mapping ); connection.Close(); OrmHelper.clostCount++; LogManager.GetLogger("Class:System.Data.MysqlDatabaseChecker Method:CheckTable").Info("数据库连接关闭成功【" + OrmHelper.clostCount + "】"); }
public void CheckTable( MappingClass mapping, String db ) { logger.Info( "[sqlserver] begin check table" ); SqlConnection connection = new SqlConnection( _connectionString ); connection.Open(); OrmHelper.initCount++; LogManager.GetLogger("Class:System.Data.SQLServerDatabaseChecker Method:CheckTable").Info("数据库连接已开启【" + OrmHelper.initCount + "】"); SqlCommand cmd = new SqlCommand(); cmd.Connection = connection; cmd.CommandText = "SELECT OBJECT_NAME(id) as name FROM sysobjects WHERE xtype='U' AND OBJECTPROPERTY(id, 'IsMSShipped') = 0"; SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { existTables.Add( reader["name"].ToString() ); logger.Info( "table found:" + reader["name"].ToString() ); } reader.Close(); existTables = new SqlServerTableBuilder().CheckMappingTableIsExist( cmd, db, existTables, mapping ); connection.Close(); OrmHelper.clostCount++; LogManager.GetLogger("Class:System.Data.SQLServerDatabaseChecker Method:CheckTable").Info("数据库连接关闭成功【" + OrmHelper.clostCount + "】"); }
public void CheckTable( MappingClass mapping, String db ) { logger.Info( "[access] begin check table" ); OleDbConnection connection = DataFactory.GetConnection( _connectionString, this.DatabaseType ) as OleDbConnection; connection.Open(); OrmHelper.initCount++; LogManager.GetLogger("Class:System.Data.AccessDatabaseChecker Method:CheckTable").Info("数据库连接已开启【" + OrmHelper.initCount + "】"); IDbCommand cmd = new OleDbCommand(); cmd.Connection = connection; object[] restrictions = new object[4]; restrictions[3] = "TABLE"; DataTable oleDbSchemaTable = connection.GetOleDbSchemaTable( OleDbSchemaGuid.Tables, restrictions ); foreach (DataRow row in oleDbSchemaTable.Rows) { existTables.Add( row["TABLE_NAME"].ToString() ); logger.Info( "table found:" + row["TABLE_NAME"].ToString() ); } existTables = new AccessTableBuilder().CheckMappingTableIsExist( cmd, db, existTables, mapping ); connection.Close(); OrmHelper.clostCount++; LogManager.GetLogger("Class:System.Data.AccessDatabaseChecker Method:CheckTable").Info("数据库连接关闭成功【" + OrmHelper.clostCount + "】"); }
public static MappingClass loadByReflection() { logger.Info("通过反射机制加载程序集..."); IList asmList = DbConfig.Instance.AssemblyList; MappingClass map = new MappingClass(); try { for (int i = 0; i < asmList.Count; i++) { Assembly assembly = ObjectContext.LoadAssembly(asmList[i].ToString()); logger.Info("程序集: " + assembly.FullName); map.AssemblyList[asmList[i].ToString()] = assembly; Type[] typeArray = ObjectContext.FindTypes(asmList[i].ToString()); foreach (Type type in typeArray) { ResolveOneType(map, type); } } logger.Info("FinishPropertyInfo"); FinishPropertyInfo(map.ClassList); logger.Info("cacheInterceptor"); cacheInterceptor(map); logger.Info("AccessorUtil.Init"); MetaList list = new MetaList(map.AssemblyList, map.ClassList); map.FactoryList = AccessorUtil.Init(list); try { checkMultiDB(map); } catch (Exception ex) { logger.Info("初始化数据库出现错误:" + ex.Message); } } catch (Exception ex) { logger.Info("初始化Orm对象出现错误:" + ex.Message); } return(map); }
private static void checkMultiDB(MappingClass map) { if (DbConfig.Instance.IsCheckDatabase == false) { logger.Info("skip check database"); return; } if (map.TableList == null) { map.TableList = new List <String>(); } if (DbConfig.Instance.ConnectionStringTable == null || DbConfig.Instance.ConnectionStringTable.Count == 0) { createDB(map); return; } logger.Info("begin check database..."); foreach (KeyValuePair <String, ConnectionString> kv in DbConfig.Instance.GetConnectionStringMap()) { String connectionString = kv.Value.StringContent; if (strUtil.IsNullOrEmpty(connectionString)) { throw new NotImplementedException(lang.get("exConnectionString") + ":" + kv.Key); } DatabaseType dbtype = kv.Value.DbType; IDatabaseChecker databaseChecker = DataFactory.GetDatabaseChecker(dbtype); databaseChecker.ConnectionString = connectionString; databaseChecker.DatabaseType = dbtype; logger.Info("CheckDatabase"); databaseChecker.CheckDatabase(); logger.Info("CheckTable"); databaseChecker.CheckTable(map, kv.Key); logger.Info("GetTables"); map.TableList.AddRange(databaseChecker.GetTables()); } logger.Info("end check database..."); }
private static void createDB(MappingClass map) { logger.Info("begin create database ..."); DatabaseType dbtype = DatabaseType.Access; IDatabaseChecker databaseChecker = DataFactory.GetDatabaseChecker(dbtype); databaseChecker.DatabaseType = dbtype; logger.Info("CheckDatabase"); databaseChecker.CheckDatabase(); logger.Info("CheckTable"); databaseChecker.CheckTable(map, DbConfig.DefaultDbName); logger.Info("GetTables"); map.TableList = databaseChecker.GetTables(); }
public static void checkMultiDB(MappingClass map) { if (DbConfig.Instance.IsCheckDatabase == false) { logger.Info("跳过检查数据库..."); return; } if (map.TableList == null) map.TableList = new List<String>(); if (DbConfig.Instance.ConnectionStringTable == null || DbConfig.Instance.ConnectionStringTable.Count == 0) { createDB(map); return; } logger.Info("开始检查数据库..."); foreach (KeyValuePair<String, ConnectionString> kv in DbConfig.Instance.GetConnectionStringMap()) { String connectionString = kv.Value.StringContent; if (strUtil.IsNullOrEmpty(connectionString)) throw new NotImplementedException(lang.get("exConnectionString") + ":" + kv.Key); DatabaseType dbtype = kv.Value.DbType; IDatabaseChecker databaseChecker = DataFactory.GetDatabaseChecker(dbtype); databaseChecker.ConnectionString = connectionString; databaseChecker.DatabaseType = dbtype; logger.Info("CheckDatabase"); databaseChecker.CheckDatabase(); logger.Info("CheckTable"); databaseChecker.CheckTable(map, kv.Key); logger.Info("GetTables"); map.TableList.AddRange(databaseChecker.GetTables()); } logger.Info("end check database..."); }
private static void cacheInterceptor(MappingClass map) { List<object> interceptor = DbConfig.Instance.Interceptor; for (int i = 0; i < interceptor.Count; i++) { Dictionary<String, object> info = interceptor[i] as Dictionary<String, object>; String asmName = info["AssemblyName"].ToString(); String typeName = info["TypeFullName"].ToString(); IInterceptor obj = rft.GetInstance(asmName, typeName) as IInterceptor; if (obj == null) { throw new Exception("load ORM interceptor error( Assembly:" + asmName + ", Type:" + typeName + ")"); } map.InterceptorList.Add(obj); } }
private static void ResolveOneType(MappingClass map, Type t) { map.TypeList.Add(t.FullName, t); //if (!t.IsAbstract && ( t.IsSubclassOf( typeof( ObjectBase ) ) || t is IEntity )) { // map.ClassList[t.FullName] = EntityInfo.GetByType( t ); // logger.Info( "Loading Type : " + t.FullName ); //} // 1029 logger.Info("加载类 : " + t.FullName); if (rft.IsInterface(t, typeof(IEntity)) && !OrmHelper.IsEntityBase(t)) { map.ClassList.Add(t.FullName, EntityInfo.GetByType(t)); } }
public static MappingClass loadByReflection() { logger.Info("通过反射机制加载程序集..."); IList asmList = DbConfig.Instance.AssemblyList; MappingClass map = new MappingClass(); try { for (int i = 0; i < asmList.Count; i++) { Assembly assembly = ObjectContext.LoadAssembly(asmList[i].ToString()); logger.Info("程序集: " + assembly.FullName); map.AssemblyList[asmList[i].ToString()] = assembly; Type[] typeArray = ObjectContext.FindTypes(asmList[i].ToString()); foreach (Type type in typeArray) { ResolveOneType(map, type); } } logger.Info("FinishPropertyInfo"); FinishPropertyInfo(map.ClassList); logger.Info("cacheInterceptor"); cacheInterceptor(map); logger.Info("AccessorUtil.Init"); MetaList list = new MetaList(map.AssemblyList, map.ClassList); map.FactoryList = AccessorUtil.Init(list); try { checkMultiDB(map); } catch (Exception ex) { logger.Info("初始化数据库出现错误:" + ex.Message); } } catch (Exception ex) { logger.Info("初始化Orm对象出现错误:" + ex.Message); } return map; }