有没有办法使用Dapper.NET与返回多个结果集的存储过程?
在我的例子中,第一个结果集是一行,只有一列; 如果是,0则调用成功,第二个结果集将包含实际的行/列数据.(如果它不为零,则会发生错误,并且不会提供第二个结果集)
有没有机会用Dapper.NET处理这个?到目前为止,我只回到那个单身0- 但仅此而已.
更新:好的,它工作正常 - 只要结果集没有.2是单个实体:
Dapper.SqlMapper.GridReader reader =
_conn.QueryMultiple("sprocname", dynParams,
commandType: CommandType.StoredProcedure);
int status = reader.Read<int>().FirstOrDefault();
MyEntityType resultObj = reader.Read<MyEntityType>().FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
现在,我还有另一项要求.
对于第二个结果集,Dapper的多映射(将从SQL Server返回的单行拆分为两个独立的实体)似乎尚未得到支持(至少似乎没有.Read<T>可以处理的重载)多映射).
如何将该行拆分为两个实体?
我已经编写了这个代码来实现一对多的关系,但它不起作用:
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
IEnumerable<Store> stores = connection.Query<Store, IEnumerable<Employee>, Store>
(@"Select Stores.Id as StoreId, Stores.Name,
Employees.Id as EmployeeId, Employees.FirstName,
Employees.LastName, Employees.StoreId
from Store Stores
INNER JOIN Employee Employees ON Stores.Id = Employees.StoreId",
(a, s) => { a.Employees = s; return a; },
splitOn: "EmployeeId");
foreach (var store in stores)
{
Console.WriteLine(store.Name);
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以发现错误吗?
编辑:
这些是我的实体:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public …Run Code Online (Sandbox Code Playgroud)