首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用petapoco创建DAL

如何使用petapoco创建DAL
EN

Stack Overflow用户
提问于 2011-08-14 02:10:17
回答 2查看 4.8K关注 0票数 15

我需要创建一个DAL和仓库使用petapoco。困难在于,我不知道它是如何管理它的连接的。

如果我使用dapper,我知道连接过程是如何流动的,因为我可以控制它。我不知道用petapoco创建DAL的最佳实践是什么。

代码语言:javascript
复制
 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类中,但我担心可伸缩性

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-03 22:32:02

我不推荐使用static,因为你可能会得到像"There is already an open DataReader associated with this Command"这样的错误,因为相同的连接被访问相同资源的不同请求使用。

有两个选项:

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

代码语言:javascript
复制
public class BaseController : Controller 
{
  protected DatabaseWithMVCMiniProfiler _database;

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

    _database = new DatabaseWithMVCMiniProfiler( "MainConnectionString");

  }
}

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

代码语言:javascript
复制
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"];
  }
}
票数 12
EN

Stack Overflow用户

发布于 2011-08-14 09:17:08

对于初始化来说,静态属性就足够了。除非您正在使用事务,否则PetaPoco每次都会打开和关闭连接。由于连接池的原因,这通常不是问题。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7052350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档