复杂对象上的NHibernate存储过程映射属性

复杂对象上的NHibernate存储过程映射属性,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,我有一个SQL存储过程,我试图用它来加载一组实体。我的实体看起来像这样 public class Person { public virtual int Id {get;set;} public virtual string Name {get;set;} public virtual Colour FavoriteColour {get;set;} } public class Colour { public virtual int

我有一个SQL存储过程,我试图用它来加载一组实体。我的实体看起来像这样

public class Person
{ 
       public virtual int Id {get;set;}
       public virtual string Name {get;set;}
       public virtual Colour FavoriteColour {get;set;}
}

public class Colour
{
       public virtual int Id {get;set;}
       public virtual string Name {get;set;}
}
<class name="Person">
  <id name="Id">
    <generator class="native"/>
  </id>
  <property name="Name" />
  <many-to-one name="FavoriteColour" class="Foo, Colour" column="ColourId"/>
</class>

<sql-query name="getAllPersons">
    <return class="Person">
        <return-property name="Id" column="PersonId"/>
        <return-property name="Name" column="PersonName"/>
        <return-property name="FavoriteColour">
            <return-column name="ColourId"/>
        </return-property>
    </return>
    exec getAllPersons
</sql-query>
我的存储过程大致如下所示:

Create Procedure getAllPersons
AS
     SELECT
            p.Id as PersonId,
            p.Name as PersonName,
            c.Id as ColourId,
            c.Name as ColourName
     FROM
            Person p JOIN Colour c
      p.ColourId = c.Id
我的映射看起来像这样

public class Person
{ 
       public virtual int Id {get;set;}
       public virtual string Name {get;set;}
       public virtual Colour FavoriteColour {get;set;}
}

public class Colour
{
       public virtual int Id {get;set;}
       public virtual string Name {get;set;}
}
<class name="Person">
  <id name="Id">
    <generator class="native"/>
  </id>
  <property name="Name" />
  <many-to-one name="FavoriteColour" class="Foo, Colour" column="ColourId"/>
</class>

<sql-query name="getAllPersons">
    <return class="Person">
        <return-property name="Id" column="PersonId"/>
        <return-property name="Name" column="PersonName"/>
        <return-property name="FavoriteColour">
            <return-column name="ColourId"/>
        </return-property>
    </return>
    exec getAllPersons
</sql-query>

执行官getAllPersons
我想知道如何将进程中的ColorName列映射到我的Person实体上的FavoriteColour.Name属性,以便
Person上的FavoriteColour对象由其Id和Name属性填充。有什么想法吗?

是的,很抱歉-stackoverflow html编辑器有问题。你读过这些帖子了吗:谢谢Chris,我读过这些帖子,但是找不到更新sql查询/返回映射xml以支持复杂对象的方法。如果我在映射中包含外键,它将延迟加载每个相关实体的n+1,即使我存储的proc返回完整的树。这可能是我遗漏了什么…我通常使用NHibernate映射我的类,但为了在某些边缘情况下进行优化,我希望使用存储过程来加载实体集合。