Dapper
Represents the key aspects of a sql operation
The command (sql or a stored-procedure name) to execute
The parameters associated with the command
The active transaction for the command
The effective timeout for the command
The type of command that the command-text represents
Should data be buffered before returning?
Should the plan for this query be cached?
Additional state flags against this command
Can async queries be pipelined?
Initialize the command definition
Additional state flags that control command behaviour
No additional flags
Should data be buffered before returning?
Can async queries be pipelined?
Should the plan cache be bypassed?
Implements custom property mapping by user provided criteria (usually presence of some custom attribute with column to member mapping)
Creates custom property mapping
Target entity type
Property selector based on target type and DataReader column name
Always returns default constructor
DataReader column names
DataReader column types
Default constructor
Always returns null
Not implemented as far as default constructor used for all cases
Returns property based on selector strategy
DataReader column name
Poperty member map
This class represents a SQL string, it can be used if you need to denote your parameter is a Char vs VarChar vs nVarChar vs nChar
Default value for IsAnsi.
A value to set the default value of strings
going through Dapper. Default is 4000, any value larger than this
field will not have the default value applied.
Create a new DbString
Ansi vs Unicode
Fixed length
Length of the string -1 for max
The value of the string
Add the parameter to the command... internal use only
Represents default type mapping strategy used by Dapper
Creates default type map
Entity type
Finds best constructor
DataReader column names
DataReader column types
Matching constructor or default one
Returns the constructor, if any, that has the ExplicitConstructorAttribute on it.
Gets mapping for constructor parameter
Constructor to resolve
DataReader column name
Mapping implementation
Gets member mapping for column
DataReader column name
Mapping implementation
Should column names like User_Id be allowed to match properties/fields like UserId ?
The settable properties for this typemap
A bag of parameters that can be passed to the Dapper Query and Execute methods
construct a dynamic parameter bag
construct a dynamic parameter bag
can be an anonymous type or a DynamicParameters bag
Append a whole object full of params to the dynamic
EG: AddDynamicParams(new {A = 1, B = 2}) // will add property A and B to the dynamic
Add a parameter to this dynamic parameter list
Add a parameter to this dynamic parameter list
If true, the command-text is inspected and only values that are clearly used are included on the connection
Add all the parameters needed to the command just before it executes
The raw command prior to execution
Information about the query
All the names of the param in the bag, use Get to yank them out
Get the value of a parameter
The value, note DBNull.Value is not returned, instead the value is returned as null
Allows you to automatically populate a target property/field from output parameters. It actually
creates an InputOutput parameter, so you can still pass data in.
The object whose property/field you wish to populate.
A MemberExpression targeting a property/field of the target (or descendant thereof.)
The size to set on the parameter. Defaults to 0, or DbString.DefaultLength in case of strings.
The DynamicParameters instance
Tell Dapper to use an explicit constructor, passing nulls or 0s for all parameters
Handles variances in features per DBMS
Gets the feature set based on the passed connection
True if the db supports array columns e.g. Postgresql
Represents simple member map for one of target parameter or property or field to source DataReader column
Creates instance for simple property mapping
DataReader column name
Target property
Creates instance for simple field mapping
DataReader column name
Target property
Creates instance for simple constructor parameter mapping
DataReader column name
Target constructor parameter
DataReader column name
Target member type
Target property
Target field
Target constructor parameter
Used to pass a IEnumerable<SqlDataRecord> as a SqlDataRecordListTVPParameter
Create a new instance of SqlDataRecordListTVPParameter
Dapper, a light weight object mapper for ADO.NET
Called if the query cache is purged via PurgeQueryCache
Purge the query cache
Return a count of all the cached queries by dapper
Return a list of all the queries cached by dapper
Deep diagnostics only: find any hash collisions in the cache
Clear the registered type handlers
Configure the specified type to be mapped to a given db-type
Configure the specified type to be processed by a custom handler
Configure the specified type to be processed by a custom handler
Configure the specified type to be processed by a custom handler
Get the DbType that maps to a given value
OBSOLETE: For internal usage only. Lookup the DbType and handler for a given Type and member
Obtains the data as a list; if it is *already* a list, the original object is returned without
any duplication; otherwise, ToList() is invoked.
Execute parameterized SQL
Number of rows affected
Execute parameterized SQL
Number of rows affected
Execute parameterized SQL that selects a single value
The first cell selected
Execute parameterized SQL that selects a single value
The first cell selected
Execute parameterized SQL that selects a single value
The first cell selected
Execute parameterized SQL that selects a single value
The first cell selected
Execute parameterized SQL and return an
An that can be used to iterate over the results of the SQL query.
This is typically used when the results of a query are not processed by Dapper, for example, used to fill a
or .
Execute parameterized SQL and return an
An that can be used to iterate over the results of the SQL query.
This is typically used when the results of a query are not processed by Dapper, for example, used to fill a
or .
Execute parameterized SQL and return an
An that can be used to iterate over the results of the SQL query.
This is typically used when the results of a query are not processed by Dapper, for example, used to fill a
or .
Return a sequence of dynamic objects with properties matching the columns
Note: each row can be accessed via "dynamic", or by casting to an IDictionary<string,object>
Return a dynamic object with properties matching the columns
Note: the row can be accessed via "dynamic", or by casting to an IDictionary<string,object>
Return a dynamic object with properties matching the columns
Note: the row can be accessed via "dynamic", or by casting to an IDictionary<string,object>
Return a dynamic object with properties matching the columns
Note: the row can be accessed via "dynamic", or by casting to an IDictionary<string,object>
Return a dynamic object with properties matching the columns
Note: the row can be accessed via "dynamic", or by casting to an IDictionary<string,object>
Executes a query, returning the data typed as per T
A sequence of data of the supplied type; if a basic type (int, string, etc) is queried then the data from the first column in assumed, otherwise an instance is
created per row, and a direct column-name===member-name mapping is assumed (case insensitive).
Executes a single-row query, returning the data typed as per T
A sequence of data of the supplied type; if a basic type (int, string, etc) is queried then the data from the first column in assumed, otherwise an instance is
created per row, and a direct column-name===member-name mapping is assumed (case insensitive).
Executes a single-row query, returning the data typed as per T
A sequence of data of the supplied type; if a basic type (int, string, etc) is queried then the data from the first column in assumed, otherwise an instance is
created per row, and a direct column-name===member-name mapping is assumed (case insensitive).
Executes a single-row query, returning the data typed as per T
A sequence of data of the supplied type; if a basic type (int, string, etc) is queried then the data from the first column in assumed, otherwise an instance is
created per row, and a direct column-name===member-name mapping is assumed (case insensitive).
Executes a single-row query, returning the data typed as per T
A sequence of data of the supplied type; if a basic type (int, string, etc) is queried then the data from the first column in assumed, otherwise an instance is
created per row, and a direct column-name===member-name mapping is assumed (case insensitive).
Executes a single-row query, returning the data typed as per the Type suggested
A sequence of data of the supplied type; if a basic type (int, string, etc) is queried then the data from the first column in assumed, otherwise an instance is
created per row, and a direct column-name===member-name mapping is assumed (case insensitive).
Executes a single-row query, returning the data typed as per the Type suggested
A sequence of data of the supplied type; if a basic type (int, string, etc) is queried then the data from the first column in assumed, otherwise an instance is
created per row, and a direct column-name===member-name mapping is assumed (case insensitive).
Executes a single-row query, returning the data typed as per the Type suggested
A sequence of data of the supplied type; if a basic type (int, string, etc) is queried then the data from the first column in assumed, otherwise an instance is
created per row, and a direct column-name===member-name mapping is assumed (case insensitive).
Executes a single-row query, returning the data typed as per the Type suggested
A sequence of data of the supplied type; if a basic type (int, string, etc) is queried then the data from the first column in assumed, otherwise an instance is
created per row, and a direct column-name===member-name mapping is assumed (case insensitive).
Executes a single-row query, returning the data typed as per the Type suggested
A sequence of data of the supplied type; if a basic type (int, string, etc) is queried then the data from the first column in assumed, otherwise an instance is
created per row, and a direct column-name===member-name mapping is assumed (case insensitive).
Executes a query, returning the data typed as per T
the dynamic param may seem a bit odd, but this works around a major usability issue in vs, if it is Object vs completion gets annoying. Eg type new [space] get new object
A sequence of data of the supplied type; if a basic type (int, string, etc) is queried then the data from the first column in assumed, otherwise an instance is
created per row, and a direct column-name===member-name mapping is assumed (case insensitive).
Executes a query, returning the data typed as per T
the dynamic param may seem a bit odd, but this works around a major usability issue in vs, if it is Object vs completion gets annoying. Eg type new [space] get new object
A single instance or null of the supplied type; if a basic type (int, string, etc) is queried then the data from the first column in assumed, otherwise an instance is
created per row, and a direct column-name===member-name mapping is assumed (case insensitive).
Executes a query, returning the data typed as per T
the dynamic param may seem a bit odd, but this works around a major usability issue in vs, if it is Object vs completion gets annoying. Eg type new [space] get new object
A single or null instance of the supplied type; if a basic type (int, string, etc) is queried then the data from the first column in assumed, otherwise an instance is
created per row, and a direct column-name===member-name mapping is assumed (case insensitive).
Executes a query, returning the data typed as per T
the dynamic param may seem a bit odd, but this works around a major usability issue in vs, if it is Object vs completion gets annoying. Eg type new [space] get new object
A single instance of the supplied type; if a basic type (int, string, etc) is queried then the data from the first column in assumed, otherwise an instance is
created per row, and a direct column-name===member-name mapping is assumed (case insensitive).
Executes a query, returning the data typed as per T
the dynamic param may seem a bit odd, but this works around a major usability issue in vs, if it is Object vs completion gets annoying. Eg type new [space] get new object
A single instance of the supplied type; if a basic type (int, string, etc) is queried then the data from the first column in assumed, otherwise an instance is
created per row, and a direct column-name===member-name mapping is assumed (case insensitive).
Execute a command that returns multiple result sets, and access each in turn
Execute a command that returns multiple result sets, and access each in turn
Maps a query to objects
The first type in the record set
The second type in the record set
The return type
The Field we should split and read the second object from (default: id)
Number of seconds before command execution timeout
Is it a stored proc or a batch?
Maps a query to objects
The Field we should split and read the second object from (default: id)
Number of seconds before command execution timeout
Perform a multi mapping query with 4 input parameters
Perform a multi mapping query with 5 input parameters
Perform a multi mapping query with 6 input parameters
Perform a multi mapping query with 7 input parameters
Perform a multi mapping query with arbitrary input parameters
The return type
array of types in the record set
The Field we should split and read the second object from (default: id)
Number of seconds before command execution timeout
Is it a stored proc or a batch?
Internal use only
Internal use only
Internal use only
Internal use only
OBSOLETE: For internal usage only. Sanitizes the paramter value with proper type casting.
Replace all literal tokens with their text form
Convert numeric values to their string form for SQL literal purposes
Internal use only
Gets type-map for the given type
Type map instance, default is to create new instance of DefaultTypeMap
Gets type-map for the given type
Type map implementation, DefaultTypeMap instance if no override present
Set custom mapping for type deserializers
Entity type to override
Mapping rules impementation, null to remove custom map
Internal use only
Throws a data exception, only used internally
How should connection strings be compared for equivalence? Defaults to StringComparer.Ordinal.
Providing a custom implementation can be useful for allowing multi-tenancy databases with identical
schema to share strategies. Note that usual equivalence rules apply: any equivalent connection strings
MUST yield the same hash-code.
Key used to indicate the type name associated with a DataTable
Used to pass a DataTable as a TableValuedParameter
Associate a DataTable with a type name
Fetch the type name associated with a DataTable
Used to pass a IEnumerable<SqlDataRecord> as a TableValuedParameter
Dummy type for excluding from multi-map
The grid reader provides interfaces for reading multiple result sets from a Dapper query
Read the next grid of results, returned as a dynamic object
Note: each row can be accessed via "dynamic", or by casting to an IDictionary<string,object>
Read an individual row of the next grid of results, returned as a dynamic object
Note: the row can be accessed via "dynamic", or by casting to an IDictionary<string,object>
Read an individual row of the next grid of results, returned as a dynamic object
Note: the row can be accessed via "dynamic", or by casting to an IDictionary<string,object>
Read an individual row of the next grid of results, returned as a dynamic object
Note: the row can be accessed via "dynamic", or by casting to an IDictionary<string,object>
Read an individual row of the next grid of results, returned as a dynamic object
Note: the row can be accessed via "dynamic", or by casting to an IDictionary<string,object>
Read the next grid of results
Read an individual row of the next grid of results
Read an individual row of the next grid of results
Read an individual row of the next grid of results
Read an individual row of the next grid of results
Read the next grid of results
Read an individual row of the next grid of results
Read an individual row of the next grid of results
Read an individual row of the next grid of results
Read an individual row of the next grid of results
Read multiple objects from a single record set on the grid
Read multiple objects from a single record set on the grid
Read multiple objects from a single record set on the grid
Read multiple objects from a single record set on the grid
Read multiple objects from a single record set on the grid
Read multiple objects from a single record set on the grid
Read multiple objects from a single record set on the grid
Has the underlying reader been consumed?
The command associated with the reader
Dispose the grid, closing and disposing both the underlying reader and command.
Implement this interface to pass an arbitrary db specific parameter to Dapper
Add the parameter needed to the command before it executes
The raw command prior to execution
Parameter name
Parses a data reader to a sequence of data of the supplied type. Used for deserializing a reader without a connection, etc.
Parses a data reader to a sequence of data of the supplied type (as object). Used for deserializing a reader without a connection, etc.
Parses a data reader to a sequence of dynamic. Used for deserializing a reader without a connection, etc.
Gets the row parser for a specific row on a data reader. This allows for type switching every row based on, for example, a TypeId column.
You could return a collection of the base type but have each more specific.
The data reader to get the parser for the current row from
The type to get the parser for
The start column index of the object (default 0)
The length of columns to read (default -1 = all fields following startIndex)
Return null if we can't find the first column? (default false)
A parser for this specific object from this row.
Gets the row parser for a specific row on a data reader. This allows for type switching every row based on, for example, a TypeId column.
You could return a collection of the base type but have each more specific.
The data reader to get the parser for the current row from
The type to get the parser for
The start column index of the object (default 0)
The length of columns to read (default -1 = all fields following startIndex)
Return null if we can't find the first column? (default false)
A parser for this specific object from this row.
var result = new List<BaseType>();
using (var reader = connection.ExecuteReader(@"
select 'abc' as Name, 1 as Type, 3.0 as Value
union all
select 'def' as Name, 2 as Type, 4.0 as Value"))
{
if (reader.Read())
{
var toFoo = reader.GetRowParser<BaseType>(typeof(Foo));
var toBar = reader.GetRowParser<BaseType>(typeof(Bar));
var col = reader.GetOrdinal("Type");
do
{
switch (reader.GetInt32(col))
{
case 1:
result.Add(toFoo(reader));
break;
case 2:
result.Add(toBar(reader));
break;
}
} while (reader.Read());
}
}
abstract class BaseType
{
public abstract int Type { get; }
}
class Foo : BaseType
{
public string Name { get; set; }
public override int Type => 1;
}
class Bar : BaseType
{
public float Value { get; set; }
public override int Type => 2;
}
Identity of a cached query in Dapper, used for extensibility
Create an identity for use with DynamicParameters, internal use only
The sql
The command type
Compare 2 Identity objects
Implement this interface to pass an arbitrary db specific set of parameters to Dapper
Add all the parameters needed to the command just before it executes
The raw command prior to execution
Information about the query
Implements this interface to provide custom member mapping
Source DataReader column name
Target member type
Target property
Target field
Target constructor parameter
Extends IDynamicParameters with facilities for executing callbacks after commands have completed
Invoked when the command has executed
Extends IDynamicParameters providing by-name lookup of parameter values
Get the value of the specified parameter (return null if not found)
Implement this interface to perform custom type-based parameter handling and value parsing
Assign the value of a parameter before a command executes
The parameter to configure
Parameter value
Parse a database value back to a typed value
The value from the database
The type to parse to
The typed value
Implement this interface to change default mapping of reader columns to type members
Finds best constructor
DataReader column names
DataReader column types
Matching constructor or default one
Returns a constructor which should *always* be used.
Parameters will be default values, nulls for reference types and zero'd for value types.
Use this class to force object creation away from parameterless constructors you don't control.
Gets mapping for constructor parameter
Constructor to resolve
DataReader column name
Mapping implementation
Gets member mapping for column
DataReader column name
Mapping implementation
This is a micro-cache; suitable when the number of terms is controllable (a few hundred, for example),
and strictly append-only; you cannot change existing values. All key matches are on **REFERENCE**
equality. The type is fully thread-safe.
Represents a placeholder for a value that should be replaced as a literal value in the resulting sql
The text in the original command that should be replaced
The name of the member referred to by the token
Permits specifying certain SqlMapper values globally.
Resets all Settings to their default values
Specifies the default Command Timeout for all Queries
Indicates whether nulls in data are silently ignored (default) vs actively applied and assigned to members
Should list expansions be padded with null-valued parameters, to prevent query-plan saturation? For example,
an 'in @foo' expansion with 7, 8 or 9 values will be sent as a list of 10 values, with 3, 2 or 1 of them null.
The padding size is relative to the size of the list; "next 10" under 150, "next 50" under 500,
"next 100" under 1500, etc.
Caution: this should be treated with care if your DB provider (or the specific configuration) allows for null
equality (aka "ansi nulls off"), as this may change the intent of your query; as such, this is disabled by
default and must be enabled.
If set (non-negative), when performing in-list expansions of integer types ("where id in @ids", etc), switch to a string_split based
operation if there are more than this many elements. Note that this feautre requires SQL Server 2016 / compatibility level 130 (or above).
Base-class for simple type-handlers
Assign the value of a parameter before a command executes
The parameter to configure
Parameter value
Parse a database value back to a typed value
The value from the database
The typed value
Base-class for simple type-handlers that are based around strings
Parse a string into the expected type (the string will never be null)
Format an instace into a string (the instance will never be null)
Assign the value of a parameter before a command executes
The parameter to configure
Parameter value
Parse a database value back to a typed value
The value from the database
The typed value
Not intended for direct usage
Not intended for direct usage
Not intended for direct usage
A type handler for data-types that are supported by the underlying provider, but which need
a well-known UdtTypeName to be specified
Creates a new instance of UdtTypeHandler with the specified UdtTypeName
Used to pass a DataTable as a TableValuedParameter
Create a new instance of TableValuedParameter
Create a new instance of TableValuedParameter
Describes a reader that controls the lifetime of both a command and a reader,
exposing the downstream command/reader as properties.
Obtain the underlying reader
Obtain the underlying command