NHibernate,如何将属性映射到子选择

NHibernate,如何将属性映射到子选择,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我目前有一个旧式系统,专门使用SPs访问数据库。我的域对象如下所示: public class User : EntityBase { public virtual string Name {get;set;} public virtual string CreatedBy {get;set;} public virtual DateTime CreatedDate {get;set;} } CREATE PROCEDURE getUser { @ID int

我目前有一个旧式系统,专门使用SPs访问数据库。我的域对象如下所示:

public class User : EntityBase
{
    public virtual string Name {get;set;}
    public virtual string CreatedBy {get;set;}
    public virtual DateTime CreatedDate {get;set;}
}
CREATE PROCEDURE getUser
{
    @ID int
}
select
     Name
     ,(SELECT TOP 1 UserName FROM AuditTrail WHERE EntityID = [User].[ID] AND EntityName = 'User' AND AuditActionID = 1 ORDER BY DateStamp) AS CreatedBy
     ,(SELECT TOP 1 DateStamp FROM AuditTrail WHERE EntityID = [User].[ID] AND EntityName = 'User' AND AuditActionID = 1 ORDER BY DateStamp) AS CreatedDate
     FROM [User]
     WHERE [User].ID = @ID
映射此的SP如下所示:

public class User : EntityBase
{
    public virtual string Name {get;set;}
    public virtual string CreatedBy {get;set;}
    public virtual DateTime CreatedDate {get;set;}
}
CREATE PROCEDURE getUser
{
    @ID int
}
select
     Name
     ,(SELECT TOP 1 UserName FROM AuditTrail WHERE EntityID = [User].[ID] AND EntityName = 'User' AND AuditActionID = 1 ORDER BY DateStamp) AS CreatedBy
     ,(SELECT TOP 1 DateStamp FROM AuditTrail WHERE EntityID = [User].[ID] AND EntityName = 'User' AND AuditActionID = 1 ORDER BY DateStamp) AS CreatedDate
     FROM [User]
     WHERE [User].ID = @ID
因此,如您所见,审计信息与数据库中的实体本身分离,CreatedBy/CreatedOn(和ModifiedBy/ModifiedOn)存储在一个名为AuditTrail的单独表中。表上的AuditActionID字段指定它是否为创建/更新

如何使用NHibernate设置此映射?我查看了JOIN,但它没有给我附加值限制的选项(而且JOIN不是我想要的)

另外,如果这在流畅的NHibernate中是可能的,这是一个额外的好处,但如果我达到了标准的NHibernate映射配置,我可以尝试

更新:

我找到了一种方法,但我不是一个粉丝。我已经设置了一个SQLQuery,它读取数据并将其映射回一个对象。这是可行的,但我想通过映射来实现。我映射到的数据库中的“值”是一个子选择且不可编辑,这可能吗

解决方案:

多亏了Diego的提示,这是我找到的最终解决方案(使用Fluent NHibernate,在我的类映射文件中):

谢谢,
M

您可以将select子句指定为属性的
公式