Dapper:特定のタイプの特定のフィールドのタイプマッピングをカスタマイズすることは可能ですか?

c# dapper micro-orm sql

質問

私はこのUserクラスを持っているとしましょう:

public class User
{
    public int      ID          { get; set; }
    public string   FirstName   { get; set; }
    public string   LastName    { get; set; }
    public string   Email       { get; set; }
    public DateTime DateCreated { get; set; }
    public DateTime LastLogin   { get; set; }
}

私は次の表にマップしたい:

CREATE TABLE "user" (
  "ID"          int(11) NOT NULL AUTO_INCREMENT,
  "FirstName"   varchar(45) DEFAULT NULL,
  "LastName"    varchar(45) DEFAULT NULL,
  "Email"       varchar(255) NOT NULL,
  "DateCreated" int(11) NOT NULL,
  "LastLogin"   int(11) NOT NULL,
  PRIMARY KEY ("ID")
)

簡単な言葉で言えば、データベースにintフィールドとしてDateTimeプロパティを格納したいと思います。ただし、これはこのクラス/テーブルの場合です。他のクラス/テーブルは別々にマッピングされるかもしれません。私はタイプやメンバーマップと組み合わせてカスタム変換関数の行に沿って何かを考えていました。

Dapperでこれを達成することは可能でしょうか?もしそうなら、

受け入れられた回答

要点は、Dapperがこれを設計上サポートしていないことです。その基本的な設計原則の1つは、表とオブジェクトの1:1マッピングです。ただし、列名とプロパティ名のマッピングは例外です。

私が最後に行った解決策は、すでにDapperとAutoMapperを組み合わせていたことです。 Dapper DAOでは、複雑なケースでは、ドメインオブジェクトとは別のエンティティオブジェクトを使用し、それらの間のマッピングを行います。したがって、本質的に、ドメインと表の間の非自明なマッピングは、オブジェクト間マッピングの単純な問題になります。


人気のある回答

これはカスタムSqlMapper.TypeHandlerで可能になるはずSqlMapper.TypeHandler 。ユニットテストのこの例を参照してください。欠点は、同じ型のすべてのフィールドにカスタム型処理を適用することです。あなたのケースでは、すべてのDateTimeプロパティは型ハンドラを通して評価されます。



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