我有一个类User
,其中包含嵌套类Bank
。
class User{
int Id;
string username;
Bank bank;
}
Class Bank{
int id;
string name;
}
我需要为User
创建一个Insert函数。在Dapper
中是否有办法执行查询并从嵌套的对象中绑定参数?
答案 0 :(得分:3)
您可以使用 DapperExtensions 为 Dapper 编写自定义映射器:
public sealed class UserMapper : ClassMapper<User>
{
public UserMapper()
{
Map(x => x.bank.id).Column("BankId");
Map(x => x.bank.name).Column("BankName");
AutoMap();
}
}
https://tortoisegit.org/docs/tortoisegit/tgit-dug-settings.html#tgit-dug-settings-hooks
确保注册包含映射器的程序集:
DapperExtensions.SetMappingAssemblies(new[] { typeof(UserMapper).Assembly });
答案 1 :(得分:1)
对于不仅User
个对象而且List<User>
可能还需要数据库插入的情况,您可以考虑使用table valued parameters
。对于你的问题,它将是:
使用IEnumerable<User>
和IEnumerable<Bank>
,即使它只是一个对象
使TVP
具有适当的架构,并且与columns
中的IEnumerable collection
订单相同,用于存储过程,否则会导致错误
您可以使用dynamic parameters
来绑定参数,如果您使用{TVP
,可以使用扩展方法IEnumerable
提供AsTableValuedParameters
的参数1}}参数不是anonymous type
,然后使用Nuget中dynamic parameters
的{{1}}将ObjectReader
转换为FastMember
,这对于TVP是强制性的。即使自定义代码也可用于IEnuemrable<T>
到Datatable
转换,如果需要省略几列,请参阅以下代码段:
IEnuemrable<T>