【问题标题】:how to create a DAL using petapoco [closed]如何使用 petapoco 创建 DAL [关闭]
【发布时间】:2011-10-26 12:16:33
【问题描述】:

我需要使用 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 类中作为静态属性,但我担心可伸缩性

【问题讨论】:

    标签: petapoco


    【解决方案1】:

    我不建议使用静态,因为您可能会收到像 "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"];
      }
    }
    

    【讨论】:

    • 感谢 Eduardo,让我再次对 PetaPoco 充满信心,也刚刚发现这个 SO,建议每个请求使用 1 个 petapoco.database 实例:stackoverflow.com/questions/7126205/…
    • PetaPoco 太棒了。我现在在几个项目中都在使用它,并且在各种场景中都能很好地工作。
    【解决方案2】:

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

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

    【讨论】:

    • 我在生产中以这种方式使用它来处理 DAL 操作之间的嵌套事务,它工作正常。
    • 我(和其他人)发现使用静态(如在每个应用程序中)有问题。看我的回答。
    猜你喜欢
    • 2015-01-21
    • 2012-12-19
    • 1970-01-01
    • 2015-04-05
    • 2017-07-25
    • 2011-11-07
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多