2012-05-13 7 views
1

こんにちは、テーブル間の結合を実行したいのですが、できません。今これは私が人からLoginAccountの値を取得しようとしたものです何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; 
    } 

これで私はLoginAccountクラスのフィールドではなく、Personクラスのフィールドしか取得できません。私を助けてください。

+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> 
関連する問題