質問: conn.Query("SELECT * FROM People"); ``` しかし、私はデータベーススキーマをPersonIdからPIDに変更した可能性があり、コードはうまくいっています。 私がしたいのは次のうちの一つです: 1. PersonIdのプロパティを、Required(デーダが検証できる)などの属性で飾ります。 2. Dapperに、マッピングが完全に書き込まれていないことを確認するように指示します(つまり、クラスのすべてのプロパティがクエリのデータで満たされていない場合に例外をスローします)。 **これは現在可能ですか?**もしそうでなければ、パフォーマンスにあまりにも悪影響を及ぼさずにこれをどうやって行うことができるかを誰かが指摘できますか? **IMHO** 、2番目のオプションは、ユーザーの既存のコードを破らず、アクセスできないクラスでより多くの属性デコレーションを必要としないため、最も効果的です。
回答: 現時点では、これは不可能ではありません。実際には、部分モデルの作成に積極的に役立つケースがたくさんあるので、何も*暗黙的*に追加することは望ましくありません。多くの場合、ドメインモデルはデータモデルの拡張ビューであるため、オプション2は機能しないと思います。コード内であまりにも多くの箇所で破損することがあると*わかっ*ています。オプション... これまでのところ、私たちは意図的に属性のようなものを避けていました。考えを維持することがされているとして、できるだけリーンと直接です。私は病理学*的*に属性に*反対*しているわけではありません。ただ、それを調べなければならないという問題があります。しかし、おそらく時間です...私たちはおそらく同時に簡単な列マッピングを可能にすることもできます。 ``` [Map(Name = "Person Id", Required = true)] int PersonId { get; set; } ``` `Name`と`Required`両方がオプションです。思考?これはいくつかの点で問題があります。特に、現時点では、特に拡張APIの中で*見ることができる列*のみ*を調べてい*ます。 もう1つの可能性は、私たちがチェックするインターフェイスです。ロード後に手動でデータを確認できるようにします。例えば: ``` public class Person : IMapCallback { void IMapCallback.BeforePopulate() {} void IMapCallback.AfterPopulate() { if(PersonId == 0) throw new InvalidOperationException("PersonId not populated"); } } ``` インターフェイスオプションは、私を多くの点でより幸せにします: * 余分な反射プロービング(1回のチェックで済む)を避けることができます。 * それはより柔軟です - あなたはあなたに何が重要かを選択することができます * 拡張性APIには影響しません しかし、それはもっとマニュアルです。 私は入力に開いたんだけど、私たちは燃えるすべての銃でそれ*右*ではなく、ラッシュを得ることを確認します。