1

我在我的项目上设置了 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();
    }
}
4

1 回答 1

-1

通过调用 ToList() 强制 ExpiredUsers 枚举列表:

return this.Context.Users.Query().Where(u => u.Expired == true).ToList();
于 2013-04-22T03:55:57.597 回答