private void ActiveAllPOConfig()
        {
            AutoMapper_POMapper = new AutoMapperPersistentObjectMapper(null);

            var config = new MapperConfiguration(cfg =>
            {
                cfg.DisableConstructorMapping();

                ((AutoMapperPersistentObjectMapper)AutoMapper_POMapper).SetAutoMapperConfigExpression(cfg);

                //use to active mapping info.
                AggregateRootPOModel po = new AggregateRootPOModel();
                (po as INeedParts <IPersistentObjectMapper>).SetParts(AutoMapper_POMapper);
                po.ConfigureMapping();
                (po as IHasAccessor <IPersistentObjectMapConfig>)?.Instance?.Build();
            });

            var mapper = config.CreateMapper();

            AutoMapper_POMapper = new AutoMapperPersistentObjectMapper(mapper);
        }
        public void MapDoAndPO_NormalMap()
        {
            var mapper = new EFCorePoManager <PersistentAggregateRoot, AggregateRootPOModel>(AutoMapper_POMapper);

            var aggregateRoot = new PersistentAggregateRoot("Hello", new ColorValueObject(255, 255, 255));
            var poResult      = mapper.MapToPO(aggregateRoot);

            Assert.NotNull(poResult);
            Assert.Equal("Hello", poResult.Name);
            Assert.Equal(255, poResult.R);
            Assert.Equal(255, poResult.G);
            Assert.Equal(255, poResult.B);

            var pOModel  = new AggregateRootPOModel("Hello", 255, 255, 255);
            var doResult = mapper.MapToDO(pOModel);

            Assert.NotNull(doResult);
            Assert.Equal("Hello", doResult.Name);
            Assert.Equal(255, doResult.Color.R);
            Assert.Equal(255, doResult.Color.G);
            Assert.Equal(255, doResult.Color.B);
        }
        public void MapDoAndPO_GiveOriginalObject_ShouldChangeOriginalObjectValue()
        {
            var mapper = new EFCorePoManager <PersistentAggregateRoot, AggregateRootPOModel>(AutoMapper_POMapper);

            var poSource = new AggregateRootPOModel("Hello", 255, 255, 255)
            {
                Id = 10086
            };
            //For example:repository.Find();
            var doResult = mapper.MapToDO(poSource);

            doResult.SetColor(new ColorValueObject(0, 0, 0));

            //For example:repository.Update();
            var updatedPoSource = mapper.MapToPO(doResult);

            Assert.Same(poSource, updatedPoSource);
            Assert.Equal(10086, updatedPoSource.Id);
            Assert.Equal(0, updatedPoSource.R);
            Assert.Equal(0, updatedPoSource.G);
            Assert.Equal(0, updatedPoSource.B);
        }