我正在尝试将投影添加到 NHibernate LINQ 查询(通过.select()
),但由于我有一些逻辑,我想使用辅助类而不是直接返回投影模型。
我的代码看起来像这样(缩短):
var query = Session.Query<MessageInstance>();
... (a few .Fetch and .ThenFetch calls)
var result = query.Where(specification.IsSatisfiedBy())
.OrderBy(m => m.CreationDate)
.Select(m => _messageModelHelper.BuildMessageModel(m));
_messageModelHelper
是一个将我的MessageInstance
对象转换为 a的对象MessageModel
,它包含处理不同场景的逻辑,因为它都依赖于相关实体。
这失败并出现错误:
字段 Dal.Repositories.MessageRepository._messageModelHelper' 没有为类型“NHibernate.Linq.NhQueryable`1 [Domain.Entities.Message]”定义
如果我避免使用一个字段(这是 DI 所必需的),并执行以下操作:
.Select(m => new MessageModelHelper().BuildMessageModel(m))
我只是得到一个System.NotSupportedException
.
看来我的方法行不通。我能做什么,同时避免new MessageModel
直接返回的需要?另外我真的需要保持投影,我不能对可枚举进行操作。