如何在MVC3中使用nhibernate执行连接

时间:2012-05-13 09:49:34

标签: asp.net-mvc-3 nhibernate nhibernate-mapping

嗨我想在表之间进行连接,但我无法做到。

这是我的课程:

 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>

现在这是我试图从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 Class的字段而不是LoginAccount类的字段。请帮助我。

1 个答案:

答案 0 :(得分:0)

person = session.CreateCriteria(typeof(Person), "person").List<Person>()应该为您提供所有属性,因为列LoginAccountID是人员表的一部分。

也许你想要的是一个关键引用

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