/// <summary> /// 保存实体归档 /// </summary> /// <param name="repository">实体仓储</param> /// <param name="component">实体集合</param> /// <param name="isSupportTree">是否是树形实体</param> public void SaveToHistory(IRepository repository, EntityList component, bool isSupportTree) { if (isSupportTree) { var treeEntityList = TreeHelper.ConvertToList <Entity>(component); ChangeEntityPersistenceStatus(treeEntityList, PersistenceStatus.New); using ( RdbDataProvider.RedirectDbSetting(DataTableMigrationPlugin.DbSettingName, DataTableMigrationPlugin.BackUpDbSettingName)) { foreach (var treeEntity in treeEntityList) { repository.Save(treeEntity); } } } else { ChangeEntityPersistenceStatus(component, PersistenceStatus.New); using ( RdbDataProvider.RedirectDbSetting(DataTableMigrationPlugin.DbSettingName, DataTableMigrationPlugin.BackUpDbSettingName)) { repository.Save(component); } } }
public static void DropAllTables() { using (var c = new RafyDbMigrationContext(DbSettingNames.DbMigrationHistory)) { DropTables(c); } using (var c = new RafyDbMigrationContext(DbSettingNames.RafyPlugins)) { DropTables(c); } using (var c = new RafyDbMigrationContext(UnitTestEntityRepositoryDataProvider.DbSettingName)) { DropTables(c); } using (RdbDataProvider.RedirectDbSetting( UnitTestEntityRepositoryDataProvider.DbSettingName, UnitTestEntityRepositoryDataProvider.DbSettingName_Duplicate )) { using (var c = new RafyDbMigrationContext(UnitTestEntityRepositoryDataProvider.DbSettingName_Duplicate)) { c.ClassMetaReader.EntityDbSettingName = UnitTestEntityRepositoryDataProvider.DbSettingName; c.ClassMetaReader.IsGeneratingForeignKey = false; DropTables(c); } } using (var c = new RafyDbMigrationContext(UnitTest2EntityRepositoryDataProvider.DbSettingName)) { DropTables(c); } using (var c = new RafyDbMigrationContext(StringTestEntityDataProvider.DbSettingName)) { DropTables(c); } }
public static void GenerateDb() { if (ConfigurationHelper.GetAppSettingOrDefault("单元测试-生成数据库", false)) { if (ClearDb && ConfigurationHelper.GetAppSettingOrDefault("单元测试-生成数据库-先清空数据库", false)) { //不想手工去删除数据库,可以使用下面这个方法来在程序中删除所有的表。 DropAllTables(); ClearDb = false; } using (var c = new RafyDbMigrationContext(DbSettingNames.DbMigrationHistory)) { c.RunDataLossOperation = DataLossOperation.All; c.AutoMigrate(); } using (var c = new RafyDbMigrationContext(DbSettingNames.RafyPlugins)) { c.HistoryRepository = new DbHistoryRepository(); c.RunDataLossOperation = DataLossOperation.All; c.AutoMigrate(); } using (var c = new RafyDbMigrationContext(UnitTestEntityRepositoryDataProvider.DbSettingName)) { c.HistoryRepository = new DbHistoryRepository(); c.RunDataLossOperation = DataLossOperation.All; c.AutoMigrate(); } UnitTestPlugin.InitailizeSequences(); using (RdbDataProvider.RedirectDbSetting( UnitTestEntityRepositoryDataProvider.DbSettingName, UnitTestEntityRepositoryDataProvider.DbSettingName_Duplicate )) { using (var c = new RafyDbMigrationContext(UnitTestEntityRepositoryDataProvider.DbSettingName_Duplicate)) { c.ClassMetaReader.EntityDbSettingName = UnitTestEntityRepositoryDataProvider.DbSettingName; c.ClassMetaReader.IsGeneratingForeignKey = false; c.HistoryRepository = new DbHistoryRepository(); c.RunDataLossOperation = DataLossOperation.All; c.AutoMigrate(); } UnitTestPlugin.InitailizeSequences(); } using (var c = new RafyDbMigrationContext(UnitTest2EntityRepositoryDataProvider.DbSettingName)) { c.HistoryRepository = new DbHistoryRepository(); c.RunDataLossOperation = DataLossOperation.All; c.AutoMigrate(); } using (var c = new RafyDbMigrationContext(StringTestEntityDataProvider.DbSettingName)) { c.HistoryRepository = new DbHistoryRepository(); c.RunDataLossOperation = DataLossOperation.All; c.AutoMigrate(); } } }
public void DPT_EntityList_Migration() { //聚合实体 var repo = RF.ResolveInstance <InvoiceRepository>(); using (RF.TransactionScope(DataTableMigrationPlugin.BackUpDbSettingName)) { using (RF.TransactionScope(DataTableMigrationPlugin.DbSettingName)) { var invoiceList = new InvoiceList { new Invoice() { InvoiceItemList = { new InvoiceItem(), new InvoiceItem(), } }, new Invoice() { InvoiceItemList = { new InvoiceItem(), new InvoiceItem(), } }, new Invoice(), new Invoice() }; RF.Save(invoiceList); Assert.AreEqual(repo.GetAll().Count, 4, "新增 Invoice 数目为4"); var context = new DataTableMigrationContext( 2, DateTime.Now.AddMinutes(2), new List <Type>() { typeof(Invoice) } ); var dataTableMigrationService = new DataTableMigrationService(context); dataTableMigrationService.ExecuteArchivingData(); Assert.AreEqual(repo.GetAll().Count, 0, "执行数据归档后 Invoice 数目为 0"); using (RdbDataProvider.RedirectDbSetting( DataTableMigrationPlugin.DbSettingName, DataTableMigrationPlugin.BackUpDbSettingName )) { Assert.AreEqual(repo.GetAll().Count, 4, "数据归档数据库 Invoice 数目为 4"); } } } }
public static void GenerateDb() { if (ConfigurationHelper.GetAppSettingOrDefault("单元测试-生成数据库", false)) { using (var c = new RafyDbMigrationContext(DbSettingNames.DbMigrationHistory)) { c.RunDataLossOperation = DataLossOperation.All; c.AutoMigrate(); } using (var c = new RafyDbMigrationContext(DbSettingNames.RafyPlugins)) { c.HistoryRepository = new DbHistoryRepository(); c.RunDataLossOperation = DataLossOperation.All; c.AutoMigrate(); } using (var c = new RafyDbMigrationContext(UnitTestEntityRepositoryDataProvider.DbSettingName)) { c.HistoryRepository = new DbHistoryRepository(); c.RunDataLossOperation = DataLossOperation.All; c.AutoMigrate(); } using (RdbDataProvider.RedirectDbSetting(UnitTestEntityRepositoryDataProvider.DbSettingName, UnitTestEntityRepositoryDataProvider.DbSettingName_Duplicate)) { using (var c = new RafyDbMigrationContext(UnitTestEntityRepositoryDataProvider.DbSettingName_Duplicate)) { c.ClassMetaReader.EntityDbSettingName = UnitTestEntityRepositoryDataProvider.DbSettingName; c.ClassMetaReader.IsGeneratingForeignKey = false; c.HistoryRepository = new DbHistoryRepository(); c.RunDataLossOperation = DataLossOperation.All; c.AutoMigrate(); } } using (var c = new RafyDbMigrationContext(UnitTest2EntityRepositoryDataProvider.DbSettingName)) { c.HistoryRepository = new DbHistoryRepository(); c.RunDataLossOperation = DataLossOperation.All; c.AutoMigrate(); } using (var c = new RafyDbMigrationContext(StringTestEntityDataProvider.DbSettingName)) { c.HistoryRepository = new DbHistoryRepository(); c.RunDataLossOperation = DataLossOperation.All; c.AutoMigrate(); } //启用批量更新 var dbSetting = DbSetting.FindOrCreate(UnitTestEntityRepositoryDataProvider.DbSettingName); if (DbSetting.IsOracleProvider(dbSetting)) { OracleBatchImporter.EnableBatchSequence(RF.ResolveInstance <BookRepository>()); OracleBatchImporter.EnableBatchSequence(RF.ResolveInstance <InvoiceRepository>()); } } }
public void DAT_EntityList_Migration() { //聚合实体 var repo = RF.ResolveInstance <InvoiceRepository>(); using (RF.TransactionScope(BackUpDbSettingName)) using (RF.TransactionScope(DbSettingName)) { var invoiceList = new InvoiceList { new Invoice() { InvoiceItemList = { new InvoiceItem(), new InvoiceItem(), } }, new Invoice() { InvoiceItemList = { new InvoiceItem(), new InvoiceItem(), } }, new Invoice(), new Invoice() }; RF.Save(invoiceList); Assert.AreEqual(repo.GetAll().Count, 4, "新增 Invoice 数目为4"); var context = new AggregationArchiveContext { OrignalDataDbSettingName = DbSettingName, BackUpDbSettingName = BackUpDbSettingName, BatchSize = 2, DateOfArchiving = DateTime.Now.AddMinutes(2), AggregationsToArchive = new List <Type> { typeof(Invoice) } }; var migrationSvc = new AggregationArchiver(); migrationSvc.Archive(context); Assert.AreEqual(repo.GetAll().Count, 0, "执行数据归档后 Invoice 数目为 0"); using (RdbDataProvider.RedirectDbSetting(DbSettingName, BackUpDbSettingName)) { Assert.AreEqual(repo.GetAll().Count, 4, "数据归档数据库 Invoice 数目为 4"); } } }
/// <summary> /// 保存实体归档 /// </summary> /// <param name="repository">实体仓储</param> /// <param name="entitiesToMigrate">实体集合</param> private void BackupToHistory(IRepository repository, EntityList entitiesToMigrate) { var newList = repository.NewList(); newList.Clone(entitiesToMigrate, CloneOptions.NewComposition()); using (RdbDataProvider.RedirectDbSetting(_orignalDataDbSettingName, _backUpDbSettingName)) { this.SaveList(repository, newList); } }
private static void AssertAllDataMigrated(EntityList rawList, IRepository repository) { Assert.AreEqual(0, repository.CountAll(), "执行数据归档后聚合根的数目为 0"); EntityList migratedList = null; using (RdbDataProvider.RedirectDbSetting(DbSettingName, BackUpDbSettingName)) { migratedList = repository.GetAll(); } AssertAggtEqual(rawList, migratedList, repository); }
public static void GenerateDb() { if (ConfigurationHelper.GetAppSettingOrDefault("单元测试-生成数据库", false)) { using (var c = new RafyDbMigrationContext(DbSettingNames.DbMigrationHistory)) { c.RunDataLossOperation = DataLossOperation.All; c.AutoMigrate(); } using (var c = new RafyDbMigrationContext(DbSettingNames.RafyPlugins)) { c.HistoryRepository = new DbHistoryRepository(); c.RunDataLossOperation = DataLossOperation.All; c.AutoMigrate(); } using (var c = new RafyDbMigrationContext(UnitTestEntityRepositoryDataProvider.DbSettingName)) { c.HistoryRepository = new DbHistoryRepository(); c.RunDataLossOperation = DataLossOperation.All; c.AutoMigrate(); } using (RdbDataProvider.RedirectDbSetting( UnitTestEntityRepositoryDataProvider.DbSettingName, UnitTestEntityRepositoryDataProvider.DbSettingName_Duplicate )) { using (var c = new RafyDbMigrationContext(UnitTestEntityRepositoryDataProvider.DbSettingName_Duplicate)) { c.ClassMetaReader.EntityDbSettingName = UnitTestEntityRepositoryDataProvider.DbSettingName; c.ClassMetaReader.IsGeneratingForeignKey = false; c.HistoryRepository = new DbHistoryRepository(); c.RunDataLossOperation = DataLossOperation.All; c.AutoMigrate(); } } using (var c = new RafyDbMigrationContext(UnitTest2EntityRepositoryDataProvider.DbSettingName)) { c.HistoryRepository = new DbHistoryRepository(); c.RunDataLossOperation = DataLossOperation.All; c.AutoMigrate(); } using (var c = new RafyDbMigrationContext(StringTestEntityDataProvider.DbSettingName)) { c.HistoryRepository = new DbHistoryRepository(); c.RunDataLossOperation = DataLossOperation.All; c.AutoMigrate(); } } }
public void DPT_TreeEntity_Migration() { //树形实体带聚合子 var repo = RF.ResolveInstance <FolderRepository>(); using (RF.TransactionScope(DataTableMigrationPlugin.BackUpDbSettingName)) { using (RF.TransactionScope(DataTableMigrationPlugin.DbSettingName)) { RF.Save(new Folder { Name = "001.", FileList = { new File(), new File() }, TreeChildren = { new Folder { TreeChildren ={ new Folder() } } } }); Assert.AreEqual(repo.GetAll().Count, 1, "树形实体只查根实体 Folder 数目为1"); var context = new DataTableMigrationContext( 2, DateTime.Now.AddMinutes(2), new List <Type>() { typeof(Folder) } ); var dataTableMigrationService = new DataTableMigrationService(context); dataTableMigrationService.ExecuteArchivingData(); Assert.AreEqual(repo.GetAll().Count, 0, "执行数据归档后 Folder 数目为 0"); using ( RdbDataProvider.RedirectDbSetting(DataTableMigrationPlugin.DbSettingName, DataTableMigrationPlugin.BackUpDbSettingName)) { Assert.AreEqual(repo.GetAll().Count, 1, "归档数据库 Folder 数目为 3"); Assert.AreEqual(repo.GetAll()[0].FileList.Count, 2, "归档数据库聚合子 File 数目为 2"); } } } }
public void DMT_AutoMigrate_ChangeDbSetting() { using (RdbDataProvider.RedirectDbSetting(UnitTestEntityRepositoryDataProvider.DbSettingName, UnitTestEntityRepositoryDataProvider.DbSettingName_Duplicate)) { using (var c = new RafyDbMigrationContext(UnitTestEntityRepositoryDataProvider.DbSettingName_Duplicate)) { /// 实体元数据默认设置的连接字符串 /// 如果切换新的数据库需要设置,否则不用设置 c.ClassMetaReader.EntityDbSettingName = UnitTestEntityRepositoryDataProvider.DbSettingName; c.HistoryRepository = new DbHistoryRepository(); c.RunDataLossOperation = DataLossOperation.All; c.AutoMigrate(); } } }
/// <summary> /// 保存实体归档 /// </summary> /// <param name="repository">实体仓储</param> /// <param name="entitiesToMigrate">实体集合</param> private void BackupToHistory(IRepository repository, EntityList entitiesToMigrate) { var options = CloneOptions.NewComposition(); options.Actions |= CloneActions.IdProperty;//Id 也需要拷贝。 options.Method = CloneValueMethod.LoadProperty; var newList = repository.NewList(); newList.Clone(entitiesToMigrate, options); using (RdbDataProvider.RedirectDbSetting(_orignalDataDbSettingName, _backUpDbSettingName)) { this.SaveList(repository, newList); } }
public void DAT_TreeEntity_Migration() { //树形实体带聚合子 var repo = RF.ResolveInstance <FolderRepository>(); using (RF.TransactionScope(BackUpDbSettingName)) using (RF.TransactionScope(DbSettingName)) { RF.Save(new Folder { Name = "001.", FileList = { new File(), new File() }, TreeChildren = { new Folder { TreeChildren ={ new Folder() } } } }); Assert.AreEqual(repo.GetAll().Count, 1, "树形实体只查根实体 Folder 数目为1"); var context = new AggregationArchiveContext { OrignalDataDbSettingName = DbSettingName, BackUpDbSettingName = BackUpDbSettingName, BatchSize = 2, DateOfArchiving = DateTime.Now.AddMinutes(2), AggregationsToArchive = new List <Type> { typeof(Folder) } }; var migrationSvc = new AggregationArchiver(); migrationSvc.Archive(context); Assert.AreEqual(repo.GetAll().Count, 0, "执行数据归档后 Folder 数目为 0"); using (RdbDataProvider.RedirectDbSetting(DbSettingName, BackUpDbSettingName)) { Assert.AreEqual(repo.GetAll().Count, 1, "归档数据库 Folder 数目为 3"); Assert.AreEqual(repo.GetAll()[0].FileList.Count, 2, "归档数据库聚合子 File 数目为 2"); } } }
public void DAT_Cut() { if (IsTestDbSQLite()) { return; } using (RF.TransactionScope(BackUpDbSettingName)) using (RF.TransactionScope(DbSettingName)) { var rawList = new BookCategoryList { new BookCategory { Name = "bc1" } }; var repo = RF.ResolveInstance <BookCategoryRepository>(); repo.Save(rawList); Assert.AreEqual(1, repo.CountAll(), "新增数目为 1"); rawList = repo.GetAll();//由于数据库中存储的值可能与内存中的值有一定的差异,所以这里需要把这些数据重新读取出来再进行对比。 Archive(new List <ArchiveItem> { new ArchiveItem { AggregationRoot = typeof(BookCategory), ArchiveType = ArchiveType.Cut }, }); Assert.AreEqual(0, repo.CountAll(), "执行数据归档后数目为 0"); using (RdbDataProvider.RedirectDbSetting(DbSettingName, BackUpDbSettingName)) { Assert.AreEqual(1, repo.CountAll(), "数据归档数据库数目为 1"); } AssertAllDataMigrated(rawList, repo); } }
public static void GenerateDb() { if (ConfigurationHelper.GetAppSettingOrDefault("Test_GenerateDb", false)) { //生成数据库时,为简单起见,需要先加载所有的插件。 //注意,此行代码会导致按需加载的单元测试全部通过。 //所以平时应该通过配置文件来关闭数据库生成功能。 RafyEnvironment.EnsureAllPluginsLoaded(); ForceAllPluginsLoaded = true; if (ClearDb && ConfigurationHelper.GetAppSettingOrDefault("Test_GenerateDb_Clear", false)) { //不想手工去删除数据库,可以使用下面这个方法来在程序中删除所有的表。 DropAllTables(); ClearDb = false; } using (var c = new RafyDbMigrationContext(DbSettingNames.DbMigrationHistory)) { c.RunDataLossOperation = DataLossOperation.All; c.AutoMigrate(); } using (var c = new RafyDbMigrationContext(DbSettingNames.RafyPlugins)) { if (c.DbSetting.ProviderName != DbSetting.Provider_SQLite) { c.HistoryRepository = new DbHistoryRepository(); } c.RunDataLossOperation = DataLossOperation.All; c.AutoMigrate(); } using (var c = new RafyDbMigrationContext(UnitTestEntityRepositoryDataProvider.DbSettingName)) { if (c.DbSetting.ProviderName != DbSetting.Provider_SQLite) { c.HistoryRepository = new DbHistoryRepository(); } c.RunDataLossOperation = DataLossOperation.All; c.AutoMigrate(); } UnitTestPlugin.InitailizeSequences(); using (RdbDataProvider.RedirectDbSetting( UnitTestEntityRepositoryDataProvider.DbSettingName, UnitTestEntityRepositoryDataProvider.DbSettingName_Duplicate )) { using (var c = new RafyDbMigrationContext(UnitTestEntityRepositoryDataProvider.DbSettingName_Duplicate)) { c.ClassMetaReader.EntityDbSettingName = UnitTestEntityRepositoryDataProvider.DbSettingName; c.ClassMetaReader.IsGeneratingForeignKey = false; if (c.DbSetting.ProviderName != DbSetting.Provider_SQLite) { c.HistoryRepository = new DbHistoryRepository(); } c.RunDataLossOperation = DataLossOperation.All; c.AutoMigrate(); } UnitTestPlugin.InitailizeSequences(); } using (var c = new RafyDbMigrationContext(UnitTest2EntityRepositoryDataProvider.DbSettingName)) { if (c.DbSetting.ProviderName != DbSetting.Provider_SQLite) { c.HistoryRepository = new DbHistoryRepository(); } c.RunDataLossOperation = DataLossOperation.All; c.AutoMigrate(); } using (var c = new RafyDbMigrationContext(StringTestEntityDataProvider.DbSettingName)) { if (c.DbSetting.ProviderName != DbSetting.Provider_SQLite) { c.HistoryRepository = new DbHistoryRepository(); } c.RunDataLossOperation = DataLossOperation.All; c.AutoMigrate(); } } }