我需要创建一个DAL和仓库使用petapoco。困难在于,我不知道它是如何管理它的连接的。
如果我使用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类中,但我担心可伸缩性
发布于 2012-04-03 22:32:02
我不推荐使用static,因为你可能会得到像"There is already an open DataReader associated with this Command"这样的错误,因为相同的连接被访问相同资源的不同请求使用。
有两个选项:
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"];
}
}发布于 2011-08-14 09:17:08
对于初始化来说,静态属性就足够了。除非您正在使用事务,否则PetaPoco每次都会打开和关闭连接。由于连接池的原因,这通常不是问题。
如果您在web应用程序中使用它,那么您应该为每个请求实例化一个PetaPoco数据库。
https://stackoverflow.com/questions/7052350
复制相似问题