0

エンティティから DTO および DTO からエンティティへのマッパーに PostSharp を使用することを検討しています。約 100 のエンティティに対してそのタスクを手動で行うことは、メンテナンスの悪夢です。Codeplex で AutoMapper を見てきましたが、私の場合、オーバーヘッドが深刻な問題になる可能性があると思います。さらに、PostSharp を使用すると、マッピング規則をさらに制御できると思います。誰かがこの問題の王様との経験を共有できれば、それは素晴らしいことです.

私が考えている方向は次のようなものです(これが不可能な場合は誰かに教えてください):

私がクラスに固執することを計画している側面は、次の2つのメソッドをコンテンツで埋めます:

EntityType EntityToDTO(DTOType DTO) {}

DTOType DTOToEntity(EntityType Entity) {}

最初のメソッドは DTO に基づいてエンティティを返し、2 番目のメソッドは反対のことを行います。アスペクト内では、各プロパティをループして、新しいターゲットを作成し、プロパティの値をターゲット オブジェクトの対応するオブジェクトに割り当てます。実行時のオーバーヘッドなしでコンパイル時にこれを行うことは可能ですか?

4

2 に答える 2

1

DTOフィールド名がエンティティフィールド名と一致する場合は、ダックタイピングを使用します

http://www.deftflux.net/blog/page/Duck-Typing-Project.aspx

http://haacked.com/archive/2007/08/19/why-duck-typing-matters-to-c-developers.aspx

あなたのコードはこのように機能します

UserDTO user = DuckTyping.Cast<UserDTO>(userEntity);

基本的に、ダックタイピングライブラリは、名前を照合することによってフィールドをマッピングします。彼らは動的に生成されたILを使用してこれをアーカイブします。

それが遅すぎる可能性がある場合は、CodeSmithにメソッドを生成させようとします。

于 2009-05-29T20:00:22.720 に答える
1

それが役立つ場合は、基本的にEntity Framework1へのPOCOオブジェクトのサポートを実装するPostSharp4ETと呼ばれるプロジェクトがあります。http://www.codeplex.com/efcontribを参照してください。

PostSharpは、新しいコードの生成があまり得意ではないことに注意してください。新しいコードと既存のコードを組み合わせるのが得意です。コードを生成する必要がある場合は、リフレクションに基づいてC#コードジェネレーターを作成し、結果のコードをコンパイルすることをお勧めします。または、前述のように、CodeSmithなどのツールを使用します。

于 2009-05-29T20:09:48.660 に答える