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);
            }
        }
Exemple #2
0
        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");
                    }
                }
            }
        }