Way*_*ina 7 stored-procedures query-by-example dapper
基本上,我想对存储过程使用"漂亮"的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();
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用并抛出错误,因为我的Customer对象可能有十几个或更多属性,而我在这种情况下只寻找两个; Dapper似乎只是检查每个属性并分配一个值,假设在可能没有的情况下sproc中有相应的参数.
我可以使用PetaPoco(传入一个强类型对象或一个匿名对象)做类似的事情,但我正在寻找比PetaPoco更抽象的东西.
我想在Dapper中做什么(或者其他微ORM?我不能使用NHibernate或重量级ORM),或者是否有一种方法我可以忽略得到相同的功能而不必写一个exec语句用什么可能是十几个参数?
如果您想指定参数,则需要明确指定:
var result = connection.Query<Customer>("MySproc",
new {cust.Id, cust.Name}, // specify the params you want to give it.
null,
false,
null,
CommandType.StoredProcedure).Single();
Run Code Online (Sandbox Code Playgroud)
我们不这样做sp_help的特效虽然你可能会建立一个帮手,做这一点,允许您运行PARAMS嗤之以鼻:cust.ToProcParams('MySproc')
或者,如果要动态构建此参数,则可以使用.
var dp = new DynamicParameters();
dp.Add("Id", cust.Id);
dp.Add("Name", cust.Name);
var result = connection.Query<Customer>("MySproc",
dp,
null,
false,
null,
CommandType.StoredProcedure).Single();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3566 次 |
| 最近记录: |