Let's say I have this User
class:
public class User
{
public int ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public DateTime DateCreated { get; set; }
public DateTime LastLogin { get; set; }
}
Which I want to map to the following table:
CREATE TABLE "user" (
"ID" int(11) NOT NULL AUTO_INCREMENT,
"FirstName" varchar(45) DEFAULT NULL,
"LastName" varchar(45) DEFAULT NULL,
"Email" varchar(255) NOT NULL,
"DateCreated" int(11) NOT NULL,
"LastLogin" int(11) NOT NULL,
PRIMARY KEY ("ID")
)
Or put in simpler words: I want to store the DateTime properties as int fields in the database. However, this is the case for this class/table. Other class/tables might be mapped differently. I was thinking of something along the lines of a custom conversion function in combination with type or member map.
Is it possible to achieve this with Dapper, and if so how?
The bottom line is that Dapper does not support this by design. One of its core design principles is a 1:1 mapping between the table and the object, with the exception of column names to property names mapping.
The solution I went with in the end was to combine Dapper with AutoMapper which we are already making heavy use of anyway. In our Dapper DAOs, in complex cases we use an entity object separate to the domain object and map between them. So essentially the non-trivial mapping between domain and table becomes a simple question of object-to-object mapping.