Exemple #1
0
        public RdbTable CreateRdbTable(IRepositoryInternal repo)
        {
            RdbTable table = null;

            var provider = RdbDataProvider.Get(repo).DbSetting.ProviderName;

            table = this.CreateRdbTableCore(repo, provider);

            table.IdentifierProvider = DbMigrationProviderFactory.GetIdentifierProvider(provider);
            table.DbTypeConverter    = DbMigrationProviderFactory.GetDbTypeConverter(provider);

            var em = repo.EntityMeta;

            foreach (var columnInfo in table.Info.Columns)
            {
                var epm = em.Property(columnInfo.Property);
                if (epm == null)
                {
                    throw new ArgumentNullException(string.Format("{0}.{1} 属性需要使用托管属性进行编写。", table.Info.EntityType.FullName, columnInfo.Property.Name));
                }

                var column = table.CreateColumn(columnInfo);

                table.Add(column);
            }

            return(table);
        }
Exemple #2
0
        /// <summary>
        /// 读取整个类型对应的数据库的元数据。
        /// </summary>
        /// <returns></returns>
        public DestinationDatabase Read()
        {
            var tableEntityTypes = this.GetMappingEntityTypes();

            var result = new DestinationDatabase(this._dbSetting.Database);

            foreach (var item in this.IgnoreTables)
            {
                result.IgnoreTables.Add(item);
            }

            if (tableEntityTypes.Count == 0)
            {
                result.Removed = true;
            }
            else
            {
                var reader = new TypesMetaReader
                {
                    _dbTypeConverter             = DbMigrationProviderFactory.GetDbTypeConverter(_dbSetting.ProviderName),
                    Database                     = result,
                    Entities                     = tableEntityTypes,
                    ReadComment                  = this.ReadComment,
                    IsGeneratingForeignKey       = this.IsGeneratingForeignKey,
                    AdditionalPropertiesComments = this.AdditionalPropertiesComments
                };
                reader.Read();
            }

            return(result);
        }
Exemple #3
0
        public static void DbMigrationTest_ClassInitialize(TestContext context)
        {
            ServerTestHelper.ClassInitialize(context);

            //运行测试前,这个库升级到最新的内容,同时它的历史记录需要清空
            using (var c = new RafyDbMigrationContext(UnitTestEntityRepositoryDataProvider.DbSettingName))
            {
                c.RunDataLossOperation = DataLossOperation.All;

                if (IsTestDbSQLite())
                {
                    c.DeleteAllTables();
                }
                else
                {
                    c.HistoryRepository = new DbHistoryRepository();
                }

                c.AutoMigrate();

                c.ResetDbVersion();

                if (!IsTestDbSQLite())
                {
                    c.ResetHistory();
                }

                var dbProvider = DbMigrationProviderFactory.GetProvider(c.DbSetting);
                dbTypeConverter = (dbProvider.CreateRunGenerator() as SqlRunGenerator).DbTypeCoverter;
            };
        }
        private void CreateTable()
        {
            //不再使用 Date 类型,因为 Oracle 和 SQLServer 里面的数据的精度不一样。改为使用 LONG
            //Oracle 中的 DateTime 类型为 Date
            var converter = DbMigrationProviderFactory.GetDbTypeConverter(this.DbSetting.ProviderName);
            var timeType  = converter.ConvertToDatabaseTypeName(DbType.Int64);

            this.DBA.RawAccesser.ExecuteText(string.Format(@"CREATE TABLE {1}(ID INT NOT NULL,Value {0} NOT NULL,PRIMARY KEY (ID))", timeType, TableName));
            this.DBA.ExecuteText("INSERT INTO " + TableName + " (ID,VALUE) VALUES (1, {0})", DefaultMinTime.Ticks);
        }
Exemple #5
0
        /// <summary>
        /// 为某个指定的仓库对象构造一个 DbTable
        /// </summary>
        /// <param name="repo"></param>
        /// <returns></returns>
        internal static RdbTable CreateORMTable(IRepositoryInternal repo)
        {
            RdbTable table = null;

            var provider = RdbDataProvider.Get(repo).DbSetting.ProviderName;

            switch (provider)
            {
            case DbSetting.Provider_SqlClient:
                table = new SqlServerTable(repo);
                break;

            case DbSetting.Provider_SqlCe:
                table = new SqlCeTable(repo);
                break;

            case DbSetting.Provider_MySql:
                table = new MySqlTable(repo);
                break;

            default:
                if (DbConnectionSchema.IsOracleProvider(provider))
                {
                    table = new OracleTable(repo);
                    break;
                }
                throw new NotSupportedException();
            }

            table.IdentifierProvider = DbMigrationProviderFactory.GetIdentifierProvider(provider);
            table.DbTypeConverter    = DbMigrationProviderFactory.GetDbTypeConverter(provider);

            var em = repo.EntityMeta;

            foreach (var columnInfo in table.Info.Columns)
            {
                var epm = em.Property(columnInfo.Property);
                if (epm == null)
                {
                    throw new ArgumentNullException(string.Format("{0}.{1} 属性需要使用托管属性进行编写。", table.Info.Class.FullName, columnInfo.Property.Name));
                }

                var column = table.CreateColumn(columnInfo);

                table.Add(column);
            }

            return(table);
        }
Exemple #6
0
        internal static IRdbTableInfo CreateTableInfo(EntityMeta em, string dbProvider)
        {
            if (em.TableMeta == null)
            {
                throw new ORMException(string.Format("类型 {0} 没有映射数据库,无法为其创造 ORM 运行时对象。", em.EntityType.FullName));
            }

            var identifierProvider = DbMigrationProviderFactory.GetIdentifierProvider(dbProvider);
            var dbTypeConverter    = DbMigrationProviderFactory.GetDbTypeConverter(dbProvider);

            var name = identifierProvider.Prepare(em.TableMeta.TableName);
            var res  = new RdbTableInfo(name, em.EntityType);

            ProcessManagedProperties(res, em, identifierProvider, dbTypeConverter);

            return(res);
        }
Exemple #7
0
        /// <summary>
        /// 为某个指定的仓库对象构造一个 DbTable
        /// </summary>
        /// <param name="repo"></param>
        /// <returns></returns>
        internal static IPersistanceTableInfo CreateTableInfo(IRepositoryInternal repo)
        {
            var em = repo.EntityMeta;

            if (em.TableMeta == null)
            {
                throw new ORMException(string.Format("类型 {0} 没有映射数据库,无法为其创造 ORM 运行时对象。", em.EntityType.FullName));
            }

            var dbSetting          = RdbDataProvider.Get(repo).DbSetting;
            var identifierProvider = DbMigrationProviderFactory.GetIdentifierProvider(dbSetting.ProviderName);
            var dbTypeConverter    = DbMigrationProviderFactory.GetDbTypeConverter(dbSetting.ProviderName);

            var name = identifierProvider.Prepare(repo.EntityMeta.TableMeta.TableName);
            var res  = new PersistanceTableInfo(name, repo);

            ProcessManagedProperties(em.EntityType, res, em, identifierProvider, dbTypeConverter);

            return(res);
        }