1

こんにちは、テーブル間の結合を実行したいのですが、実行できません。

これが私のクラスです:

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

 public class LoginAccount 
{
 //fields of LoginAccount
}

Person のマッピング ファイル

<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>

これは、Person から LoginAccount の値を取得しようとしたものです。

  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 クラスのフィールドは取得できません。助けてください。

4

1 に答える 1

0

person = session.CreateCriteria(typeof(Person), "person").List<Person>()LoginAccountID列は person テーブルの一部であるため、すべてのプロパティを提供する必要があります。

おそらくあなたが望むのはキーリファレンスです

<composite-id>
  <key-many-to-one class="HobbyHomes.Model.LoginAccount" name="LoginAccount">
    <column name="LoginAccountID"></column>
  </key-many-to-one>
</composite-id>
于 2012-05-14T12:39:48.797 に答える