/// <inheritdoc />
        public SqlCommand MakeDeleteByPrimaryKeyCommand(object id, TableSchema tableSchema)
        {
            var sql         = new SqlCommandBuilder("DELETE FROM ").Append(tableSchema.Name);
            var primaryKeys = tableSchema.GetPrimaryKeys();

            sql.AppendWherePrimaryKeysClause(primaryKeys);
            return(sql.ToPrimaryKeySql(tableSchema, id));
        }
        /// <inheritdoc />
        public SqlCommand MakeDeleteCommand(object entity, TableSchema tableSchema)
        {
            Ensure.NotNull(entity, nameof(entity));

            var sql = new SqlCommandBuilder("DELETE FROM ").Append(tableSchema.Name);

            sql.AppendWherePrimaryKeysClause(tableSchema.GetPrimaryKeys());
            return(sql.ToCommand(entity));
        }
        /// <inheritdoc />
        public SqlCommand MakeFindCommand(object id, TableSchema tableSchema)
        {
            Ensure.NotNull(id, nameof(id));
            var primaryKeys = tableSchema.GetPrimaryKeys();

            var sql = new SqlCommandBuilder("SELECT ").AppendSelectPropertiesClause(tableSchema.Columns);

            sql.AppendClause("FROM ").Append(tableSchema.Name);
            sql.AppendWherePrimaryKeysClause(primaryKeys);
            return(sql.ToPrimaryKeySql(tableSchema, id));
        }
        public SqlMultipleCommand <TEntity> MakeUpdateRangeCommand <TEntity>(IEnumerable <TEntity> entities, TableSchema tableSchema)
            where TEntity : class
        {
            bool Include(ColumnSchema p) => p.Usage.IncludeInUpdateStatements;

            var sql = new SqlCommandBuilder("UPDATE ").Append(tableSchema.Name);

            sql.AppendClause("SET ").AppendColumnNamesEqualParameters(tableSchema.Columns, ", ", Include);
            sql.AppendWherePrimaryKeysClause(tableSchema.GetPrimaryKeys());
            return(sql.ToMultipleCommand(entities));
        }
        /// <inheritdoc />
        public SqlCommand MakeUpdateCommand(object entity, TableSchema tableSchema)
        {
            Ensure.NotNull(entity, nameof(entity));

            bool Include(ColumnSchema p) => p.Usage.IncludeInUpdateStatements;

            var sql = new SqlCommandBuilder("UPDATE ").Append(tableSchema.Name);

            sql.AppendClause("SET ").AppendColumnNamesEqualParameters(tableSchema.Columns, ", ", Include);
            sql.AppendWherePrimaryKeysClause(tableSchema.GetPrimaryKeys());
            return(sql.ToCommand(entity));
        }