基本上,我想为存储过程使用“漂亮”的 Dapper 语法,而不必手动使用exec MySproc @p1, @p2, @p3, @p4
等等,但我需要能够传入一个具有各种属性集的强类型对象,并让这个对象用于映射参数。我知道我可以用匿名对象做到这一点,但我正在考虑的场景类似于一个复杂的搜索表单,其中可以搜索多个字段,并且相应的存储过程可以有很多参数(许多具有默认值)。
理想情况下,我希望能够做这样的事情:
var cust = new Customer();
cust.FirstName = ...
cust.LastName = ...
// using .NET 3.5 so need to use ugly syntax :(
var result = connection.Query<Customer>("MySproc", cust, null, false, null, CommandType.StoredProcedure).Single();
但是,这不起作用并引发错误,因为我的 Customer 对象可能有十几个或更多属性,在这种情况下我只寻找两个;Dapper 似乎只是检查每个属性并分配一个值,假设存储过程中可能没有相应的参数。
我可以使用 PetaPoco 做类似的事情(传入强类型对象或匿名对象),但我正在寻找比 PetaPoco 更抽象的东西。
我想在 Dapper(或另一个微 ORM 中做些什么?我不能使用 NHibernate 或重量级 ORM),或者有没有一种方法我忽略了获得相同的功能而不必编写一个 exec 语句与什么可能是十几个参数?