CreateParameters() extension method will turn each property into a dynamic parameter using the property name and value.
public class MyObject
{
public int Id {get; set; }
public string Name { get; set; }
public DateTime ModifiedDate { get; set; }
}
var parameters = myObject.CreateParameters();
To customize parameters, use Parameterize() to add, remove, and replace with a fluent syntax.
var parameters = myObject.Parameterize()
.Add("NewId", myIdentifier)
.Remove(x => x.Name)
.Update(x => x.ModifiedDate, DateTime.Now)
.Create();
connection.Execute("myStoredProcedure", parameters, commandType: CommandType.StoredProcedure);
An IParameterFactory interface is available for projects leveraging dependency injection. This interface has the same API method signatures as the extension methods above.
IParameterFactory parameterFactory = new ParameterFactory();
var parameters = parameterFactory.Parameterize(myObject)
.Add("NewId", myIdentifier)
.Remove(x => x.Name)
.Update(x => x.ModifiedDate, DateTime.Now)
.Create();
You can define your own fluent api with extension methods. The following example adds a LastModified parameter.
public static class MyParameterBuilderExtensions
{
public static IParameterBuilder<T> AddLastModified<T>(this IParameterBuilder<T> parameterBuilder)
{
//Cast to ParameterBuilder<T>
var builder = (ParameterBuilder<T>)parameterBuilder;
//"Add" tells the builder to add this parameter key and value
builder.Add("LastModified", DateTime.Now);
//Return the builder
return builder;
}
}
Use the new fluent method and create the dynamic parameter:
IParameterFactory parameterFactory = new ParameterFactory();
var parameters = parameterFactory.Parameterize(myObject)
.AddLastModified()
.Create();
TODO:
- Add Rename fluent method
- Create fluent API for customizing and creating Table Valued Parameters
- Document all the built-in fluent methods