鉴于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,因为我对它一无所知,但希望它足以为您指明正确的方向。:)