-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Give the following model:
public class MyModel
{
public Guid Id { get; set; } = Guid.NewGuid();
public DateTimeOffset DateOccured { get; set; } = DateTimeOffset.Now;
public string Description { get; set; }
}
The following code snippets are equivalent:
var model = new MyModel{ Description = "Describe this thing" };
// Using Dapper Method 1
var dp1 = new DynamicParameters();
dp1.Add("@Id", model.Id);
dp1.Add("@DateOccured", model.DateOccured);
dp1.Add("@Description", model.Description);
// Using Dapper Method 2
var dp2 = new DynamicParameters(model);
// Using Parakeet (returns a DynamicParameters object)
var dp3 = Parakeet<MyModel>.Generate(model);
In this simple use case, there is not much difference. Parakeet will add all public instance properties on the model to the DynamicParameters
instance - as long as it deems the property "eligible".
Automatically eligible property types include:
- all primitive types
enum
string
decimal
Guid
DateTime
DateTimeOffset
TimeSpan
TimeZoneInfo
DataTable
IEnumerable<IDataRecord>
Includes the nullable versions of the types listed above, as applicable.
If your model includes a DataTable
or IEnumerable<IDataRecord>
property, it will be automatically added as a Table-Valued Paramater using the built in extension method AsTableValuedParameter()
provided by Dapper.
public class MyModel
{
public Guid Id { get; set; } = Guid.NewGuid();
public DateTimeOffset DateOccured { get; set; } = DateTimeOffset.Now;
public string Description { get; set; }
public DataTable MyDataTable { get; set;} = new DataTable();
}
var model = new MyModel();
// Using Dapper
var dp1 = new DynamicParameters();
dp1.Add("@Id", model.Id);
dp1.Add("@DateOccured", model.DateOccured);
dp1.Add("@Description", model.Description);
dp1.Add("@MyDataTable", model.MyDataTable.AsTableValuedParameter());
// Using Parakeet (returns a DynamicParameters object)
var dp3 = Parakeet<MyModel>.Generate(model);
If you want Parakeet to include properties that don't meet the default eligibility criteria, decorate the property with the [Parakeet]
attribute and it will be inlcuded.
You can also add modifiers to the attribute that will change how the property is added to the DynamicParameters
object. These modifiers correspond to the arguments to the DynamicParameters.Add()
method.
Give the parameter a different name than the property.
[Parakeet("DifferentName")]
public string SomeName { get; set; }
// OR
[Parakeet(propertyName: "DifferentName")]
public string SomeName { get; set; }
When using Parakeet, the above property will be added like this:
dp.Add("@DifferentName", model.SomeName);
Parameter direction is, by default ParameterDirection.Input
, unless otherwise specified in the attribute.
[Parakeet(direction: ParameterDirection.Output)]
public string SomeName { get; set; }
When using Parakeet, the above property will be added like this:
dp.Add("@SomeName", null, ParameterDirection.Output);
You can also specify tableName
(for table-valued parameters), dbType
, size
, precision
and scale
as optional named parameters on the attribute.
You can indicate unused properties should not be included by passing a true value as the second parameter to the Generate
method. This is equivalent to setting the RemoveUnused
property of the returned DynamicParameters
object to true.
var pb = Parakeet<MyModel>.Generate(model, true);
If you want Parakeet to ignore a property that would otherwise be included (but can't use the RemoveUnused
property because, for example, the parameters are needed by a stored procedure but don't show up in the query command) you can mark that property as ignored by using the [ParakeetIgnore]
attribute, and it will not be added to the DynamicParameters
.
[ParakeetIgnore]
public string DoNotSendMe { get; set; }