Использование объединений в nhibernate - PullRequest
0 голосов
/ 11 июня 2011

Мой код приложения выглядит следующим образом:

Таблицы

tblPerson
---------
PersonId (PK)
Name

tblAddress
----------
AddressId(PK)
Address

PersonAddress
-------------
PersonId (PK)
AddressId

Класс сущности

PersonAddresstbl.cs

public class PersonAddressl
{
    private int personid;
    private int addressid;
    private string name;

    public virtual int PersonId
    {
        get { return personid; }
        set { personid = value; }
    }

    public virtual int AddressId
    {
        get { return addressid; }
        set { addressid = value; }
    }

    public virtual string Name
    {
        get { return name; }
        set { name = value; }
    }
}

XML-файл

PersonAddresstbl.hbn.xml

<class name="PersonAddressl">
  <id name="id" column="PersonId">
    <generator class="native"/>
  </id>
  <join table="tblPersonAddress"
      optional="true">
    <key column="PersonId"
        unique="true"/>
    <many-to-one name="Address"
        column="AddressId"/>
  </join>
</class>

<class name="tblAddress">
  <id name="id" column="AddressId">
    <generator class="native"/>
  </id>
</class>

реализация

PersonAddresstbl tbl = new PersonAddresstbl();

Criteria crit = session.CreateCriteria(typeof(PersonAddresstbl));
IList lst = crit.List();

возвращает 0 записей.

Может кто-нибудь сказать мне, я нахожусь на правильном пути или где я иду не так?

Спасибо, Паван

Ответы [ 2 ]

1 голос
/ 11 июня 2011

Трудно сказать, в чем проблема, но я всегда использую nHibernate при устранении неполадок, чтобы включить show_sql, чтобы я мог видеть генерируемый SQL (так что вы можете попробовать это в окне запроса базы данных).См. Эту ссылку для информации: Включить show_sql в nHibernate

0 голосов
/ 11 июня 2011

Что я нахожу странным, так это то, что ваш класс 'Person' имеет свойство 'AddressId', которое имеет тип integer, а в вашем отображении (класса Person - ну, у него странное имяPersonAddressl '- вы указываете, что у вас есть отношение «один ко многим» с классом «Address». Кроме того, я не вижу, чтобы у вас был класс «Address».Модель базы данных имеет отношение «многие ко многим» между Person и Address.

Вы используете отображение join, которое позволяет вам «объединять» данные из двух таблиц базы данных в один класс, новаша модель класса не отражает это. Посмотрите на дополнительную информацию об атрибуте объединения здесь: http://ayende.com/blog/3961/nhibernate-mapping-join

Проверьте также 'set': http://ayende.com/blog/3943/nhibernate-mapping-set

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...