2012-05-13 55 views
1

嗨,我想執行到表之間的連接,但我無法做到這一點。如何在MVC3中使用nhibernate執行連接

這裏是我的課:

public class Person 
{ 
    public virtual LoginAccount LoginAccount { get; set; } 
} 

public class LoginAccount 
{ 
//fields of LoginAccount 
} 

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly ="HobbyHomes" namespace ="HobbyHomes.Model" > 
<class name ="Person"> 

<composite-id class="HobbyHomes.Model.LoginAccount" name="LoginAccount"> 
    <key-property name="LoginAccountID"> 
    <column name="LoginAccountID"></column> 
    </key-property> 
</composite-id> 

//other properties 

</class> 

現在的映射文件是什麼這是我試圖從人獲取登錄賬號的值:

public IList<Person> FetchPerson(ICollection<Learner> learner) 
    { 
     log.Debug("Started"); 
     ISession session = DataAccessLayerHelper.OpenReaderSession(); 
     IList<Person> person = null; 
     ITransaction transaction = null; 
     Disjunction dj = new Disjunction(); 
     try 
     { 
      transaction = session.BeginTransaction(); 


      person = session.CreateCriteria(typeof(Person), "person") 
          .CreateCriteria("person.LoginAccount", "LoginAccount", NHibernate.SqlCommand.JoinType.LeftOuterJoin) 
          .List<Person>(); 
      transaction.Commit(); 


     } 
     catch (Exception ex) 
     { 
      if (transaction != null && transaction.IsActive) 
       transaction.Rollback(); 
      log.Error(ex); 

     } 
     finally 
     { 
      if (transaction != null) 
       transaction.Dispose(); 

      if (session != null && session.IsConnected) 
       session.Close(); 
     } 

     log.Debug("End"); 
     return person; 
    } 

但與此我只能夠獲取Person類的字段而不是LoginAccount類的字段。請幫助我。

+0

這可能會幫助你走了。 http://nhforge.org/blogs/nhibernate/archive/2008/10/05/querying-with-nhibernate.aspx –

+1

我個人使用QueryOver API。你也希望看到這一點。它可以爲你節省一些時間。 –

回答

0

person = session.CreateCriteria(typeof(Person), "person").List<Person>()應該爲您提供所有屬性,因爲列LoginAccountID是人員表的一部分。

也許你想要的是一個keyreference

<composite-id> 
    <key-many-to-one class="HobbyHomes.Model.LoginAccount" name="LoginAccount"> 
    <column name="LoginAccountID"></column> 
    </key-many-to-one> 
</composite-id> 
相關問題