问题:Dapper Extensions dbConnection.Get(personId)
我有一个名为Person的模型:
Person
{
public int PersonId { get; set; }
public string Name { get; set; }
}
在数据库中我有这个表:
data.Persons
Pers_Id
Pers_Name
当我在没有任何自定义映射的情况下尝试此操作时,出现错误“无效对象名称'人'。”我相信这是一个映射问题,因为当我用前缀'Pers_'完全映射模型时,使用'data.Persons'获取工作。
但有没有办法自动映射前缀?我正在使用的数据库有许多不同的表,有不同的前提。
我也已将所有内容映射到Entity框架。是否有可能从Entity DbModelBuilder获取地图设置?
Dapper-Extensions是基于约定的。对于模式,它使用.dbo,对于主键,它使用Id。如果表与约定不匹配,则必须创建自定义映射 。
public class MyModelMapper : ClassMapper<MyModel>
{
public MyModelMapper()
{
//use different table name
Table("table_name");
//use a custom schema
Schema("not_dbo_schema");
//have a custom primary key
Map(x => x.ThePrimaryKey).Key(KeyType.Assigned);
//Use a different name property from database column
Map(x=> x.Foo).Column("Bar");
//Ignore this property entirely
Map(x=> x.SecretDataMan).Ignore();
//optional, map all other columns
AutoMap();
}
}
另一种方法是使用Dapper并编写内联查询:
connection.Query("select * from foo.table where myId = {myId}", new {myId})
更新:
另一种方法是使用代码生成和T4文本模板
这是一个简单的例子