4

DIおよびインターセプターとして機能するキャッスルウィンザーを使用したasp.net MVCアプリケーションがあります。

現在、Dapper は ORM マッピングに使用されています。Dapper は、ADO .Net 接続、共通オブジェクトで動作する単純なオブジェクトからエンティティへのマッピング プロバイダーです。

リポジトリとビジネス サービス レイヤーが既に配置されているので、作業単位を実装したいと考えています。

EF には自動トランザクション機能があり、SaveChanges() によってすべてのエンティティ変更が永続化されることはわかっています。

EF 以外の多層アプリケーション用に Unit Of Work を使用する方法はありますか?

4

1 に答える 1

1

ある種の AOP を探していると思います。この例を見てください http://www.sharpcrafters.com/solutions/transaction。属性を使用してメソッドをトランザクションでラップするか、次のように BAL のすべてのメソッドで使用されることを宣言することもできます。

[assembly: TransactionScope( AttributeTargetTypes = "MyBALNamespace.*",
AttributeTargetTypeAttributes = MulticastAttributes.Public,
AttributeTargetMemberAttributes = MulticastAttributes.Public )]

ここに記載されているように:http://www.sharpcrafters.com/solutions/logging

アップデート

を使用している場合はTransactionScope、MSDTC への不必要なトランザクションのエスカレーションを避けるようにしてください。中に 2 つの接続 (同じデータベースへの接続であっても) を開いた場合、TransactionScopeすぐに DTC にエスカレートされ、パフォーマンスに影響を与えます (スコープの破棄時に不要な例外が発生する場合もあります)。これは SQLServer2008 の動作です。スコープ中は 1 つの接続のみを使用するか、最初の接続を閉じてから別の接続を開く必要があります。

于 2012-11-14T12:24:27.550 に答える