我在我的项目上设置了DI注入,它注入了一个IUnitOfWork的实现,它有我的存储库和Commit()方法。我把它注入我的业务层,一切都很棒。
public Business(IUnitOfWork context) {
this.Context = context;
}
public IEnumerable<User> ExpiredUsers() {
return this.Context.Users.Query().Where(u => u.Expired == true);
}
此业务类注入我的Controller
public class UsersController : Controller {
public UsersController(Business business) {
this.Business = business;
}
public ActionResult Home() {
return View(new HomeViewModel(business.ExpiredUsers());
}
}
用户是一个IQueryable,我的业务方法使用Entity Framework很好地转换为SQL。我的问题/关注是在执行此方法之后,查询导致延迟执行的用户对象的属性。在我的情况下,请说视图中的某些内容会进入每个用户的address.State.Cities,或其他一些导致延迟执行和查询数据库n次的属性。
我已经设置了DI,使用Ninject将数据库上下文(IUnitOfWork)设置为每个请求一次。由于数据库上下文仍然是打开的,我不知道如何防止这种情况发生。我宁愿视图抛出异常;这样我就能及早发现这些问题。为了完整起见,这是我的模块。
public class Module : NinjectModule
{
public override void Load()
{
this.Bind<IUnitOfWork>().To<SqlUnitOfWork>().InRequestScope();
}
}
答案 0 :(得分:-1)
强制ExpiredUsers通过调用ToList()来枚举列表:
return this.Context.Users.Query().Where(u => u.Expired == true).ToList();