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); }
/// <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); }
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); }
/// <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); }
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); }
/// <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); }