Dapperから返されたオブジェクトにnull値とデフォルトのプロパティ値があるのはなぜですか?

.net c# dapper

質問

私はDapperをリポジトリで使用して、クエリの結果をAPIが返すDTO型のリストにマップしています。すべて正常に動作しているようですが、クエリとマッピングが完了した後、正しい数のオブジェクトがリストに挿入されますが、すべてのintプロパティは0であり、文字列はnullです。私はDapperを他のプロジェクトに使ってきました。また、データが正しいことを確認しました.SQL Management Studioにクエリをコピーすると、正しいデータが得られます。

次に、カスタムマッピングロジックを含むリポジトリベースクラスのコンストラクタを示します。私はこのコードがヒットしていることを確認しました。

static BaseRepository()
{
    SqlMapper.SetTypeMap(typeof(T),
      new CustomPropertyTypeMap(
          typeof(T), (type, columnName) => type.GetProperties()
              .FirstOrDefault(prop => prop.GetCustomAttributes(false)
                      .OfType<ColumnAttribute>()
                      .Any(attr => attr.Name == columnName))));
}

リストを作成するリポジトリメソッドは次のとおりです。

public IEnumerable<Dog> GetAll()
{
    var dogs = Db.Query<Dog>(@"SELECT Id, Name FROM Dogs");
    return dogs;
}

そして、私の目的はここにあります:

[DataContract]
public class Dog
{
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public string Name { get; set; }
}

だから、私は "犬"変数が移入されることを確認しましたが、すべてのIdとName要素は0またはnullです。最終的なJSONの結果は次のようになります。

[
    {
        Id: 0,
        Name: null
    },
    {
        Id: 0,
        Name: null
    },
    {
        Id: 0,
        Name: null
    }

]

また、 [Column(Name = "Id")]ようにプロパティに列属性を追加しようとしました。まだ運がありません。私は何を見落としていますか?

編集:私は、この関連する答えの例題のコードと要点を使用してこの問題を解決することができました。

エキスパート回答

[Column("Id")]などを使用して列を定義/認識するカスタムマップがあるようです。ただし、この属性を追加していないため、列は見つかりません...



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ