private string BuildTemporalTableSqlFromEntityTypeConfiguration(IEntityType entityType, bool appendSeparator)
        {
            StringBuilder sqlBuilder = new StringBuilder();

            var relationalEntityType = context.Model.FindEntityType(entityType.Name);

            if (relationalEntityType is IEntityType)
            {
                string tableName = relationalEntityType.GetTableName();
                string schema    = relationalEntityType.GetSchema() ?? "dbo";

                bool isEntityConfigurationTemporal = TemporalEntitiesCache.IsEntityConfigurationTemporal(entityType);
                bool isEntityTemporalInDatabase    = tableHelper.IsTableTemporal(tableName, schema);

                ITemporalTableSqlGenerator temporalTableSqlGenerator = temporalTableSqlGeneratorFactory
                                                                       .CreateInstance(isEntityConfigurationTemporal, isEntityTemporalInDatabase, tableName, schema);

                string temporalTableSql = temporalTableSqlGenerator.Generate();

                if (!string.IsNullOrWhiteSpace(temporalTableSql))
                {
                    sqlBuilder.AppendLine(temporalTableSql);

                    if (appendSeparator)
                    {
                        sqlBuilder.AppendLine(new string('-', 100));
                    }
                }
            }
            return(sqlBuilder.ToString());
        }
        /// <inheritdoc />
        public ITemporalTableSqlGenerator CreateInstance(
            bool isEntityConfigurationTemporal,
            bool isEntityTemporalInDatabase,
            string tableName,
            string schemaName)
        {
            ITemporalTableSqlGenerator temporalTableSqlGenerator = null;

            if (isEntityConfigurationTemporal && !isEntityTemporalInDatabase)
            {
                temporalTableSqlGenerator = new CreateTemporalTableGenerator(tableName, schemaName);
            }
            else if (!isEntityConfigurationTemporal && isEntityTemporalInDatabase)
            {
                temporalTableSqlGenerator = new DropTemporalTableGenerator(tableName, schemaName);
            }
            else
            {
                temporalTableSqlGenerator = new NoSqlTemporalTableGenerator(tableName, schemaName);
            }

            return(temporalTableSqlGenerator);
        }