Dapperのマッピングエンティティ

.net c# dapper mapping orm

質問

私はDapperを使って作業を始めました。データベースのテーブルにエンティティをマッピングするような非常に簡単な方法はありません。

私はストアドプロシージャを持っています:

CREATE PROCEDURE [dbo].GetUserById (@UserId int)
AS  
begin               
        SELECT UserId,LastName,FirstName,EmailAddress
        FROM users
        WHERE UserID = @UserId

end
go

エンティティ:

public class User
{
    public int Id { get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public string Email { get; set; }
}

私のコードでは大胆なクエリです:

int userid=1;
    User User = connection.Query<User>("#GetUserById", new {userid=userid}, commandType: CommandType.StoredProcedure).FirstOrDefault();

私の質問は:どのようにIdは自分のエンティティのユーザーにIDを自分のデータベースに伝えることができますか?

EFでは、私は次のようなことをします:

MapSingleType(c => new
            {
                UserId = c.Id,
                Firstname = c.Firstname,
                Lastname = c.Lastname,
                EmailAddress = c.Email
            }).ToTable("users");

どのように上記をダッペアで達成することができますか?

受け入れられた回答

Dapperは意図的にマッピングレイヤーを持っていません。それは働くことができる絶対最小であり、プロセスの実際のシナリオの大部分を率直にカバーしています。しかし、TSQLでエイリアスしたくないと正しく理解していて、パススループロパティを必要としない場合は、非汎用Query APIを使用してください。

User user = connection.Query("...", ...).Select(obj => new User {
           Id = (int) obj.UserId,
           FirstName = (string) obj.FirstName,
           LastName = (string) obj.LastName,
           Email = (string) obj.EmailAddress
        }).FirstOrDefault();

単一のレコードの場合にはもっと単純に:

var obj = connection.Query("...", ...).FirstOrDefault();
User user = new User {
      Id = (int) obj.UserId,
      FirstName = (string) obj.FirstName,
      LastName = (string) obj.LastName,
      Email = (string) obj.EmailAddress
};

ここでのトリックは、ジェネリックでないQuery(...) APIは、列名ごとにメンバーを提供するdynamic APIを使用することです。


人気のある回答

それはできません、あなたのユーザークラスは、クエリから戻ってくる結果に一致するように定義する必要があります。

結果を戻したら、別のクラスに手動でマッピングする必要があります(またはAutoMapperを使用します)



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