我有两个POCO-s。 A和B.
public class A{
[Slapper.AutoMapper.Id]
public int Id { get; set; }
public B BType { get; set; }
// Rest of the fields
}
public class B{
[Slapper.AutoMapper.Id]
public int Id { get; set; }
public string Name {get;set;}
}
T-SQL存储过程结果:
ID B_Id B_Name 1 1 B1 2 2 B2
使用Dapper获取List的代码是:
List<A> aList = new List<A>();
using (IDbConnection connection = new SqlConnection(GlobalConfig.ConnectionString()))
{
var p = new DynamicParameters();
p.Add("@Id", someId);
// Here debug shows me 2 correct objects inside of var list
var list = connection.Query<dynamic>("[spApp_getBlaBlaByID]", p, commandType: CommandType.StoredProcedure);
// After casting I got only 1
aList =(Slapper.AutoMapper.MapDynamic<A>(list) as IEnumerable<A>).ToList();
}
return aList; // Debugging shows only 1 one of the objects
那么,我的代码出了什么问题?请帮忙找错。 附:我从Java来到C#。也许在C#世界中,Slapper.Automapper不再处于趋势中。使用DAPPER绘制POCO-s的灵活而现代的解决方案是什么?
答案 0 :(得分:1)
首先,我不明白需要Slapper。 Dapper能够处理这个角色。因此,如下所示的某些代码可以在没有Slapper的情况下运行。
List<A> list = connection.Query<A>("[spApp_getBlaBlaByID]"......
其次是@ orhtej2在评论中提到的内容。存储过程的名称以“ByID”结尾。此约定表明它将返回单个记录。你确定SP会返回多条记录吗?如果是,则上面的代码示例应该这样做。如果它返回单个记录,请将上面的内容更改为以下内容:
A a = connection.Query<A>("[spApp_getBlaBlaByID]"......