私は2つの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
だから、私のコードで何が間違っていますか?間違いを見つけるのを助けてください。 PS私はJavaからC#に来た。たぶんC#の世界Slapper.Automapperはもはや傾向にありません。 POCO-DをDAPPERとマッピングするための柔軟で現代的なソリューションは何ですか?
まず、私はスラッパーの必要性をここで理解していません。 Dapperはこの役割を処理できます。そこで、以下のようなコードの何かがスラッパーせずに動作するはずです。
List<A> list = connection.Query<A>("[spApp_getBlaBlaByID]"......
2つ目は@ orhtej2がコメントで述べたことです。ストアドプロシージャの名前は "ByID"で終わります。この規約は、単一のレコードを返すことを示唆しています。 SPは複数のレコードを返すのですか?はいの場合は、上記のコードサンプルを実行する必要があります。単一のレコードを返す場合は、上記のように変更します:
A a = connection.Query<A>("[spApp_getBlaBlaByID]"......