Exemple #1
0
 /// <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);
         }
     }
 }
Exemple #2
0
 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);
     }
 }
Exemple #3
0
        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();
                }
            }
        }
Exemple #4
0
        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");
                    }
                }
            }
        }
Exemple #5
0
        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");
                    }
                }
        }
Exemple #7
0
        /// <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);
            }
        }
Exemple #8
0
        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);
        }
Exemple #9
0
 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();
         }
     }
 }
Exemple #10
0
        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");
                    }
                }
            }
        }
Exemple #11
0
 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();
         }
     }
 }
Exemple #12
0
        /// <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);
            }
        }
Exemple #13
0
        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");
                    }
                }
        }
Exemple #14
0
        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);
                }
        }
Exemple #15
0
        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();
                }
            }
        }