2011-08-13 12 views
12

petapocoを使用してDALとリポジトリを作成する必要があります。難しさは、それがどのように接続を管理しているのかわかりません。petapocoを使用してDALを作成する方法

私がdapperを使用していた場合、私はそれを制御しているので接続プロセスがどのように流れるのか知っています。私はpetapocoでDALを作成する際のベストプラクティスは何か分かりません。

public class UserRepository 
    { 
     public IEnumerable<User> All() 
     { 
      var db = new PetaPoco.Database("Sqlite_Connection");//this line 
      var s = db.Query<User>("SELECT * FROM Users"); 
      return s.ToList(); 
     } 
    } 

私は、静的プロパティとしての私のDALHelperクラスでvar db = new PetaPoco.Database("Sqlite_Connection");//this line を配置したいと思いますが、私は、静的プロパティが初期化のための罰金となりますスケーラビリティ

答えて

11

のようなエラーが発生する可能性があるので、静的な使用はお勧めしません。同じリソースにアクセスする別の要求によって同じ接続が使用されるからです。

つのオプション:

1.コントローラの基本クラスでの接続を作成します

public class BaseController : Controller 
{ 
    protected DatabaseWithMVCMiniProfiler _database; 

    protected override void OnActionExecuting(ActionExecutingContext filterCon) 
    { 
    base.OnActionExecuting(filterCon); 

    _database = new DatabaseWithMVCMiniProfiler("MainConnectionString"); 

    } 
} 

要求ごとに1つの接続を作成する2. staticメソッド

public static class DbHelper { 
    public static Database CurrentDb() { 
    if (HttpContext.Current.Items["CurrentDb"] == null) { 
     var retval = new DatabaseWithMVCMiniProfiler("MainConnectionString"); 
     HttpContext.Current.Items["CurrentDb"] = retval; 
     return retval; 
    } 
    return (Database)HttpContext.Current.Items["CurrentDb"]; 
    } 
} 
+1

Thanks Eduardo、もう一度PetaPocoに自信を持てるようになりました。また、リクエストごとに1 petapoco.databaseインスタンスを使用するよう提案されているので、これを見つけました。http://stackoverflow.com/questions/7126205/how-can-integrate-mvcminiprofiler-with- petapoco-changing-the-sources – joeriks

+1

PetaPocoは素晴らしいです。私は今、いくつかのプロジェクトでこれを使用しており、あらゆる種類のシナリオで非常にうまく機能しています。 –

3

心配です。 トランザクションを使用していない限り、PetaPocoは毎回接続を開いて閉じます。これは通常、接続プーリングによる問題ではありません。

Webアプリケーションでこれを使用している場合、リクエストごとに1つのPetaPocoデータベースをインスタンス化する必要があります。

+0

私はそれをこのようにを使用していますDAL操作間のネストされたトランザクションを処理するためのプロダクションが正常に動作しています。 – Larry

+0

私(および他の人)は、静的(アプリケーションごとに)の使用に問題があることを発見しました。私の答えを見てください。 –

関連する問題