Slapper.AutoMapper仅返回对象列表中的单个结果

时间:2018-03-13 18:44:05

标签: c# dapper slapper.automapper

我有两个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的灵活而现代的解决方案是什么?

1 个答案:

答案 0 :(得分:1)

首先,我不明白需要Slapper。 Dapper能够处理这个角色。因此,如下所示的某些代码可以在没有Slapper的情况下运行。

List<A> list = connection.Query<A>("[spApp_getBlaBlaByID]"......

其次是@ orhtej2在评论中提到的内容。存储过程的名称以“ByID”结尾。此约定表明它将返回单个记录。你确定SP会返回多条记录吗?如果是,则上面的代码示例应该这样做。如果它返回单个记录,请将上面的内容更改为以下内容:

A a = connection.Query<A>("[spApp_getBlaBlaByID]"......
相关问题