NHibernate - личные отношения - PullRequest
1 голос
/ 21 января 2011

У меня проблема с отношениями один-к-одному в NHibernate. Структуры моих объектов следующие:

public partial class PersonDataContext
{
    protected int _personid;
    protected string _name;
    protected EmployeeDataContext _employee;
}



public partial class EmployeeDataContext
{
    protected int _personid;
    protected string _payrollno;
}

В моей модели каждый PersonDataContext должен содержать ровно один EmployeeDataContext, и каждый существующий EmployeeDataContext должен быть частью PersonDataContext. Это обычные отношения один на один.

Теперь к отображению:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
    <class name="PersonDataContext, DAL" table="`Person`" lazy="false">
        <id name="PersonId" column="`PersonId`" type="int">
            <generator class="native" />
        </id>
        <property type="string" name="name" column="`name`" />
        <one-to-one name="Employee" cascade="save-update" class="EmployeeDataContext,DAL" />
    </class>
</hibernate-mapping>


<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
    <class name="EmployeeDataContext, DAL" table="`Employee`" lazy="false">
        <id name="PersonId" column="`PersonId`">
            <generator class="foreign">
                <param name="property" >PersonId</param>
            </generator>
        </id>
        <property type="string" length="30" name="PayRollNo" column="`PayRollNo`" />
    </class>
</hibernate-mapping>

Затем я создаю PersonDataContext, который сам создает EmployeeDataContext. Затем, когда я сохраняю его, NHibernate генерирует исключение, «Невозможно разрешить свойство: PersonId».

Ответы [ 2 ]

0 голосов
/ 21 января 2011

У вас нет свойства PersonId в EmployeeDataContext.

У вас должно быть свойство PersonDataContext типа PersonDataContext, и это то, что указано в параметре.

0 голосов
/ 21 января 2011

Ошибка внешнего свойства, измените «PersonId» на «PersonDataContext» следующим образом:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
     <class name="EmployeeDataContext, DAL" table="`Employee`" lazy="false">
         <id name="PersonId" column="`PersonId`">
             <generator class="foreign">
                 <param name="property" >**PersonDataContext**</param>
             </generator>
         </id>
         <property type="string" length="30" name="PayRollNo" column="`PayRollNo`" />
     </class>
</hibernate-mapping>
...