假设我有这个User
类:
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; }
}
我要映射到下表:
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")
)
或者换句话说:我想将DateTime属性存储为数据库中的int字段。但是,这个类/表就是这种情况。其他类/表可能以不同方式映射。我正在考虑与自定义转换函数结合使用的类型或成员映射。
是否有可能用Dapper实现这一目标,如果是这样的话怎么样?
底线是Dapper不支持这种设计。其核心设计原则之一是表和对象之间的1:1映射,但列名称与属性名称映射除外。
我最终采用的解决方案是将Dapper与AutoMapper结合起来,无论如何我们已经大量使用了它。在我们的Dapper DAO中,在复杂的情况下,我们使用与域对象分开的实体对象并在它们之间进行映射。因此,域和表之间的非平凡映射本质上成为对象到对象映射的简单问题。
可能可以使用新的SqlMapper.SetTypeMap
方法来实现。有关更多信息,请参见https://stackoverflow.com/a/12615036/331281 。