我正在尝试使用 Fluent NHibernate 和 Linq to NHibernate 设置适当的域架构。我有我的控制器调用我的存储库类,这些类在引擎盖下执行 NHibernate 并传回 ICollections 数据。这似乎运作良好,因为它抽象了数据访问并将 NHibernate 功能保留在“小字”中。
但是,现在我发现我的控制器需要在不同的上下文中使用相同的数据调用。例如,我的仓库返回一个用户列表。当我想显示用户列表时这很好,但是当我想开始使用子类来显示角色等时,我遇到了 SELECT N+1 问题。我知道如何在 NHibernate 中改变它,所以它使用连接,但我的具体问题是我在哪里放置这个逻辑?我不希望每个 GetAllUsers() 调用也返回角色,但我确实希望其中一些。
所以这是我看到的三个选项:
- 更改我的映射中的设置,以便将角色加入到我的查询中。
- 创建两个存储库调用 - GetAllUsers() 和 GetUsersAndRoles()。
- 将我的 IQueryable 对象从存储库返回到控制器并使用 NHibernate Expand 方法。
抱歉,如果我没有很好地解释这一点。我刚开始接触 DDD,很多这个术语对我来说仍然是新的。谢谢!