2013-07-29 21 views
12

私はdapper-dot-netを使用して、私のasp.net mvcアプリケーションのいくつかの領域を高速化しようとしています。私もEF5コードを使用しています。dapper-dot-netをEntity Frameworkで使用できますか?

dapperのドットネットはのIDbConnectionのためのちょうどいくつかの拡張機能であるので、私はちょうどDapperのドットネットを使用する

DbContext.Database.Connection 

を使用することができますか?私はそれが動作していることをテストします。しかし、私はこれが正しい方法であるとは分かりません。特に私がその方法を使用すると、Entity Frameworkにはパフォーマンスに悪影響を与える影響がまだありますか?

答えて

6

はい、この方法で使用できます。 Dapperは拡張メソッドを処理しているだけなので、コードのパフォーマンスに影響されやすい領域に使用できます。そして、コードの他の部分にEFを使用し続けることができます。まだEFを使用しているクエリは高速ではありませんが、少なくともDapperを使用したクエリは高速になります。

+0

ハードな経験に基づいて、「高速」とは「2〜3桁の速さ」を意味します。私は、Dapperに変換した後、Entity Frameworkで高度に最適化されたクエリを10分かかっていましたが、サイズと複雑さの20倍のクエリを完了するのに数分の1がかかりました:http://stackoverflow.com/questions/9350467/how- do-i-write-one-to-many-query-in-dapper-net/30080951#30080951を使用します。 – Contango

+0

@Contango EFのAsNoTrackingでそれがありましたか? –

+0

@Ian Warburtonわかりませんが、DapperのパフォーマンスはEntity Frameworkをほこりの中に残しています。 Dapperは主にデータの読み込みを目的としているため、データベースに書きたい場合は、10人の同時ユーザーをサポートできる非効率で平凡なパフォーマンスがあれば、Entity Frameworkが機能するでしょう。 – Contango

11

Dapperを使用すると、特定のシナリオでパフォーマンスが大幅に向上する可能性があります。

DapperとEF接続を共有できます。ただし、(問題はありそうもありませんが)複数のデータリーダーを同じ接続に関連付ける試みのために、並行性の問題に注意する必要があります。

このような問題が発生した場合は、接続を共有する代わりに接続文字列(DbContext.Database.Connection.ConnectionString)を使用してDapperに新しい接続を与えることができます。

+2

* true *の間は、ほとんどのシナリオで問題になることはほとんどありません。スレッディング*は確かに重要なことではありませんので、主に公開データリーダが存在するリスクがあります。エラーはあまり微妙ではありません) –

+4

@MarcGravell私はあなたの言葉をそれに服用します:)しかし、Dapperに(EFを使用する代わりに)自分の接続を常に与える方が安全ではないのですか?あるいはそうすることに不利な点はありますか? –

関連する問題