private static DbCompiledModelInfo BuildDbCompiledModelInfo(string nameOrConStr, DatabaseType dbType) { lock (_buildCompiledModelLock) { ConventionSet conventionSet = null; switch (dbType) { case DatabaseType.SqlServer: conventionSet = SqlServerConventionSetBuilder.Build(); break; case DatabaseType.MySql: conventionSet = MySqlConventionSetBuilder.Build(); break; case DatabaseType.PostgreSql: conventionSet = NpgsqlConventionSetBuilder.Build(); break; case DatabaseType.Oracle: conventionSet = OracleConventionSetBuilder.Build(); break; default: throw new Exception("暂不支持该数据库!"); } ModelBuilder modelBuilder = new ModelBuilder(conventionSet); _modelTypeMap.Values.ForEach(x => { modelBuilder.Model.AddEntityType(x); }); DbCompiledModelInfo newInfo = new DbCompiledModelInfo { ConStr = nameOrConStr, DatabaseType = dbType, Model = modelBuilder.FinalizeModel() }; return(newInfo); } }
private static DbCompiledModelInfo BuildDbCompiledModelInfo(string nameOrConStr, DatabaseType dbType) { lock (_buildCompiledModelLock) { DbConnection connection = DbProviderFactoryHelper.GetDbConnection(nameOrConStr, dbType); DbModelBuilder modelBuilder = new DbModelBuilder(DbModelBuilderVersion.Latest); modelBuilder.HasDefaultSchema(GetSchema()); var entityMethod = typeof(DbModelBuilder).GetMethod("Entity"); _modelTypeMap.Values.ToList().ForEach(aModel => { entityMethod.MakeGenericMethod(aModel).Invoke(modelBuilder, null); }); var theModel = modelBuilder.Build(connection).Compile(); DbCompiledModelInfo info = new DbCompiledModelInfo { ConStr = connection.ConnectionString, DatabaseType = dbType, DbCompiledModel = theModel }; return(info); string GetSchema() { switch (dbType) { case DatabaseType.SqlServer: return("dbo"); case DatabaseType.MySql: case DatabaseType.PostgreSql: return("public"); case DatabaseType.Oracle: return(new OracleConnectionStringBuilder(connection.ConnectionString).UserID);; default: return("dbo"); } } } }