Нужна помощь в отношениях один-ко-многим с NHibernate - PullRequest
0 голосов
/ 05 ноября 2011

Вот сопоставления для моих объектов:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="NHibernateTest"
                   namespace="NHibernateTest.Database">
    <class name="Employer">
        <id name="Id" type="Int64" column="id" unsaved-value="0">
            <generator class="identity"/>
        </id>
        <property name="Name"/>
    </class>
</hibernate-mapping>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="NHibernateTest"
                   namespace="NHibernateTest.Database">
    <class name="Employee">    
        <id name="Id" type="Int64" column="id" unsaved-value="0">
            <generator class="identity"/>
        </id>
        <property name="FirstName"/>
        <property name="LastName"/>
        <property name="Email"/>
    </class>
</hibernate-mapping>

Вот сами объекты:

namespace NHibernateTest.Database {
    public class Employee {
        public virtual long Id { get; set; }
        public virtual string FirstName { get; set; }
        public virtual string LastName { get; set; }
        public virtual string Email { get; set; }
    }

    public class Employer {
        public virtual long Id { get; set; }
        public virtual string Name { get; set; }
        public virtual IList<Employee> Employees { get; set; }
    }
}

Я пытаюсь использовать утилиту SchemaExport для генерации схемы, но не могу понять, как написать отображение для IList. Прошло много времени с тех пор, как я прикоснулся к Hibernate для Java и считаю, что документация «один ко многим» для NHibernate немного сложна для понимания. Если бы кто-то мог написать это отображение, я был бы очень признателен.

1 Ответ

1 голос
/ 05 ноября 2011

Мне нужно было угадать имя таблицы Employee и внешний ключ Employer.Id, но вот как я это сделаю:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="NHibernateTest"
                   namespace="NHibernateTest.Database">
    <class name="Employer">
        <id name="Id" type="Int64" column="id" unsaved-value="0">
            <generator class="identity"/>
        </id>
        <property name="Name"/>
        <bag name="Employees" table="Employees" >
            <key column="EmployerId"></key>
            <one-to-many class="Employee"></one-to-many>
       </bag>
    </class>
</hibernate-mapping>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="NHibernateTest"
                   namespace="NHibernateTest.Database">
    <class name="Employee">    
        <id name="Id" type="Int64" column="id" unsaved-value="0">
            <generator class="identity"/>
        </id>
        <property name="EmployerId" />
        <property name="FirstName"/>
        <property name="LastName"/>
        <property name="Email"/>
    </class>
</hibernate-mapping>

Вот код .net:

namespace NHibernateTest.Database {
    public class Employee {
        public Employee(Employer employer) { EmployerId = employer.Id; }
        protected Employee() {} // nHibernate needs access to a parameterless constructor.
        public virtual long Id { get; set; }
        protected virtual long EmployerId { get; set; }
        public virtual string FirstName { get; set; }
        public virtual string LastName { get; set; }
        public virtual string Email { get; set; }
    }

    public class Employer {
        public virtual long Id { get; set; }
        public virtual string Name { get; set; }
        public virtual IList<Employee> Employees { get; set; }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...