我在我的项目上设置了 DI 注入,它注入了一个 IUnitOfWork 的实现,它有我的存储库和一个 Commit() 方法。我将它注入我的业务层,一切都很好。
public Business(IUnitOfWork context) {
this.Context = context;
}
public IEnumerable<User> ExpiredUsers() {
return this.Context.Users.Query().Where(u => u.Expired == true);
}
这个业务类被注入到我的控制器中
public class UsersController : Controller {
public UsersController(Business business) {
this.Business = business;
}
public ActionResult Home() {
return View(new HomeViewModel(business.ExpiredUsers());
}
}
用户是一个 IQueryable,我的业务方法使用实体框架很好地转换为 SQL。我的问题/担心是在执行此方法后,查询用户对象的属性导致延迟执行。在我的例子中,假设视图中的某些内容进入了每个用户的 address.State.Cities 或其他导致延迟执行和查询数据库 n 次的属性。
我已经使用 Ninject 将 DI 设置为每个请求一次的数据库上下文 (IUnitOfWork)。由于数据库上下文仍处于打开状态,我不知道如何防止这种情况发生。我宁愿视图抛出异常;这样我就可以及早发现这些问题。为了完整起见,这是我的模块。
public class Module : NinjectModule
{
public override void Load()
{
this.Bind<IUnitOfWork>().To<SqlUnitOfWork>().InRequestScope();
}
}