public void BulkInsertOrUpdate_EntityWithShadowProperties_SavesToDatabase(DbServer databaseType)
        {
            ContextUtil.DbServer = databaseType;

            using var db = new SpDbContext(ContextUtil.GetOptions <SpDbContext>(databaseName: $"{nameof(EFCoreBulkTest)}_ShadowProperties"));

            db.BulkInsertOrUpdate(this.GetTestData(db).ToList(), new BulkConfig
            {
                EnableShadowProperties = true
            });

            var modelFromDb = db.SpModels.OrderByDescending(y => y.Id).First();

            Assert.Equal((long)10, db.Entry(modelFromDb).Property(SpModel.SpLong).CurrentValue);
            Assert.Null(db.Entry(modelFromDb).Property(SpModel.SpNullableLong).CurrentValue);

            Assert.Equal(new DateTime(2021, 02, 14), db.Entry(modelFromDb).Property(SpModel.SpDateTime).CurrentValue);
        }
        public void BulkInsertOrUpdate_EntityWithShadowProperties_GlobalFunc_SavesToDatabase(DbServer dbServer)
        {
            ContextUtil.DbServer = dbServer;

            using var db = new SpDbContext(ContextUtil.GetOptions <SpDbContext>(databaseName: $"{nameof(EFCoreBulkTest)}_ShadowProperties"));

            var data = GetTestData(db, false, 10000);

            db.BulkInsertOrUpdate(data.ToList(), new BulkConfig
            {
                EnableShadowProperties = true,
                ShadowPropertyValue    = (entity, property) =>
                {
                    if (property == SpModel.SpLong)
                    {
                        return(10);
                    }
                    else if (property == SpModel.SpNullableLong)
                    {
                        return(null);
                    }
                    else if (property == SpModel.SpDateTime)
                    {
                        return(new DateTime(2021, 02, 14));
                    }

                    return(property);
                }
            });

            var modelFromDb = db.SpModels.OrderByDescending(y => y.Id).First();

            Assert.Equal((long)10, db.Entry(modelFromDb).Property(SpModel.SpLong).CurrentValue);
            Assert.Null(db.Entry(modelFromDb).Property(SpModel.SpNullableLong).CurrentValue);

            Assert.Equal(new DateTime(2021, 02, 14), db.Entry(modelFromDb).Property(SpModel.SpDateTime).CurrentValue);
        }
 public void Dispose()
 {
     using var db = new SpDbContext(ContextUtil.GetOptions <SpDbContext>(databaseName: $"{nameof(EFCoreBulkTest)}_ShadowProperties"));
     db.Database.EnsureDeleted();
 }