带有Linq的BLToolkit——为什么需要“using”语句



鉴于SubSonic 3最近的(极端)性能问题,我们希望迁移ORM,最好重写尽可能少的代码(主要是Linq)。

所以我在看BLToolkit。SubSonic和BLToolkit之间的一个主要区别是BLToolkit总是需要using语句。例如:

static void SingleTableTest()
{
    using (var db = new NorthwindDB()) //This
    {
        var query =
            from e in db.Employee
            where e.EmployeeID > 5
            orderby e.LastName, e.FirstName
            select e;
        foreach (var employee in query)
        {
            Console.WriteLine("{0} {1}, {2}", employee.EmployeeID, employee.LastName, employee.FirstName);
        }
    }
}

这到底是干什么的?当您创建数据库的新实例时,它是否会创建新的连接?把它"包装"到一个静态类中,这样我就可以在任何地方进行var q=from e in Database.Employee ...,这合理吗?这在web应用程序的上下文中会产生什么影响?

我猜您的示例中的NorthwindDB类是基于DbManager的。DbManager是连接的包装器,其行为类似于连接。您应该尝试另一个类-DataContext。它正是为您的场景而设计的。

我不知道BLToolkit,但从你的评论来看,你想知道是否有可能在每个HTTP请求中只使用一个对象,使用实体框架之类的东西。您在global.asax的Application_BeginRequest事件中创建了一个db对象,而不是using语句。您可以在Application_EndRequest中处理它。您可以将对象存储在HttpContext.Current.Items中,这是一个方便的每个请求的集合。

正如我所说,我不知道这是否适用于BLToolkit,因为我对它一无所知,但希望它足以为您指明正确的方向。:)

相关内容

  • 没有找到相关文章

最新更新