3

我考虑到 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 应用程序的上下文中会产生什么影响?

4

2 回答 2

4

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

于 2011-06-29T02:29:31.977 回答
0

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

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

于 2011-06-28T19:58:39.990 回答