2011-08-13 24 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(); 
     } 
    } 

我想向var db = new PetaPoco.Database("Sqlite_Connection");//this line 我DALHelper类作为一个静态的属性,但我担心的可扩展性

回答

11

我不推荐使用静态,因为您可以得到像这样的错误,因为相同的连接被不同的请求使用相同的资源。

两个选项:

1.创建在控制器基类的连接

public class BaseController : Controller 
{ 
    protected DatabaseWithMVCMiniProfiler _database; 

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

    _database = new DatabaseWithMVCMiniProfiler("MainConnectionString"); 

    } 
} 

2.静态方法创建每个请求一个连接

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

谢谢爱德华多,让我对PetaPoco再次充满信心,也发现这与建议使用1 petapoco.database实例每个请求:http://stackoverflow.com/questions/7126205/how-can-integrate-mvcminiprofiler-with- petapoco-without-changing-the-sources – joeriks

+1

PetaPoco很棒。我现在在几个项目中使用它,并且在各种情况下运行良好。 –

3

静态属性将被罚款的初始化。 PetaPoco每次都会打开和关闭连接,除非您正在使用事务。由于连接池,这通常不是问题。

如果您在Web应用程序中使用它,那么您应该为每个请求实例化一个PetaPoco数据库。

+0

我使用这种方式在生产来处理DAL操作之间的嵌套事务并且它工作正常。 – Larry

+0

我(和其他人)发现使用静态(如在每个应用程序中)有问题。看到我的答案。 –