2017-06-14 199 views
0

我想根據anested對象的屬性排序我的數據。Nhibernate按嵌套對象屬性排序

這是主類 「公告」:

[Serializable] 
public class Bulletin 
{ 
    public virtual Int32 BulletinID { get; set; } 
    public virtual Int32 AgentID { get; set; } 
    public virtual Recipient Recipient 
    { 
     get 
     { 
      var rm = new CRecipientManager(); 
      var rec = rm.GetById(1); 
      return rec; 
     } 
    } 
    public virtual DateTime? DateSent { get; set; } 
    public virtual DateTime DateEntry { get; set; } 
} 

的hbm.xml文件中:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="Sfa.Engine.domain.Bulletin,Sfa.Engine" table="Bulletins" lazy="true"> 
    <id name="BulletinID" column="BulletinID"> 
     <generator class="native" /> 
    </id> 
    <property name="AgentID" column="AgentID" type="Int32" not-null="true" /> 
    <property name="DateSent" column="DateSent" type="datetime" not-null="false" /> 
    <property name="DateEntry" column="DateEntry" type="datetime" not-null="true" /> 
    </class> 
</hibernate-mapping> 

這是第二個 「收件人」:

public class Recipient 
{ 
    public virtual Int32 RecipientID { get; set; } 
    public virtual String Prefix { get; set; } 
    public virtual String Firstname { get; set; } 
    public virtual String Lastname { get; set; } 
    public virtual String Email { get; set; } 
    public virtual DateTime DateEntry { get; set; } 
} 

我的經理代碼:

public ICollection<Bulletin> GetAll() 
{ 
    using (ISession session = NHibernateHelper.OpenSession()) 
    { 
     var bulletins = session 
      .CreateCriteria(typeof(Bulletin)) 
      .AddOrder(Order.Asc("BulletinID")) 
      .CreateAlias("Recipient", "rec").AddOrder(Order.Asc("rec.Firstname")) 
      .List<Bulletin>(); 
     return bulletins; 
    } 
} 

我創建的類收件人的別名和使用的名字作爲排序標準,但NHibernate的給我這個: 無法解析屬性:收件人的:Sfa.Engine.domain.Bulletin

收件人屬性格式Bulletin對象的訪問是公開的,什麼是錯的?

+0

其實, 「公報」,沒有項目參照對象收件人。這可能是正常的嗎?或者我必須將關係映射爲一對一? – Ras

回答

0

檢查:

public ICollection<Bulletin> GetAll() 
    { 
     using (ISession session = null) 
     { 
      var bulletins = session 
       .CreateCriteria(typeof(Bulletin)) 
       .CreateAlias("Recipient", "rec") 
       .SetProjection(Projections.ProjectionList() 
        .Add(Projections.Property("rec.Firstname"), "Firstname") 
       ) 
       .AddOrder(Order.Asc("BulletinID")) 
       .AddOrder(Order.Asc("Firstname")) 
       .List<Bulletin>(); 
      return bulletins; 
     } 
    } 

看到主類的hbm.xml this

+0

你在哪裏初始化ISession對象?如果我調用此代碼,會話obj爲空,但如果我使用NHibernateHelper.OpenSession()初始化我得到了我上面提到的同樣的錯誤 – Ras