powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Мапирование коллекции сущностей с общим предком в NHibernate
4 сообщений из 4, страница 1 из 1
Мапирование коллекции сущностей с общим предком в NHibernate
    #38998737
NDAleksey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго всем времени!
Смысл вопроса таков - есть сущности: Employee, Boss, Department, IPerson. Один Department хранит несколько Employee и 1-го Boss-а.
Employee и Boss расширяют IPerson:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
    public interface IPerson
    {
        int Id { get; set; }
        string Fio { get; set; }
        int Age { get; set; } 
    }

    public class Employee : IPerson
    {
        public virtual int Id { get; set; }
        public virtual string JobTitle { get; set; }
        public virtual string Fio { get; set; }
        public virtual int Age { get; set; }
    }

    public class Boss : IPerson
    {
        public virtual int Id { get; set; }
        public virtual string Fio { get; set; }
        public virtual int Age { get; set; }
        public virtual int EmployeesAmount { get; set; }
    }

    public class Department : IEntity
    {
        public virtual int Id { get; set; }
        public virtual string Name { get; set; }
        public virtual IList<IPerson> Employees { get; set; }
    }



Хочу, чтобы NHibernate при выполнении следующего кода:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
            Employee ivan = new Employee() { Fio = "Иван Иванович", Age = 34, JobTitle = "Engeneer"};
            Employee petr = new Employee() { Fio = "Петр Петрович", Age = 28, JobTitle = "Engeneer" };
            Employee sidor = new Employee() { Fio = "Сидор Сидорович", Age = 27, JobTitle = "Engeneer" };
            Boss fedor = new Boss() { Fio = "Федор Федорович", Age = 60, EmployeesAmount = 10 };

            Department devDep = new Department
            {
                Name = "Программирование",
                Employees = new List<IPerson> { ivan, petr, sidor, fedor }
            };
            
            UnitOfWork unitOfWork = new UnitOfWork(true);
            unitOfWork.DepartmentRepository.Add(devDep);
            unitOfWork.Save();


NHibernate каким-то "неведомо-волшебным" образом смапил так, чтобы по дженерелизированному списку сотрудников создались таблицы.
Возможно иметь такой список с общим интерфейсом и разными классами объектов в нем и при этом, чтобы ORM через рефлексию, что ли, смог их отмапить?

Привожу пример мапировок:
Employee.hbm.xml
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="NHibernateTest"
                   namespace="NHibernateTest.Infrastructure.Domain">
  <class name="NHibernateTest.Infrastructure.Domain.Employee" table="Employee" lazy="true">
    <id name="Id" column="Id" type="Int32">
      <generator class="identity" />
    </id>
    <property name="Fio" not-null="false"/>
    <property name="Age" not-null="false"/>
    <property name="JobTitle" not-null="false"/>
  </class>
</hibernate-mapping>



Boss.hbm.xml
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="NHibernateTest"
                   namespace="NHibernateTest.Infrastructure.Domain">
  <class name="NHibernateTest.Infrastructure.Domain.Boss" table="Boss" lazy="true">
    <id name="Id" column="Id" type="Int32">
      <generator class="identity" />
    </id>
    <property name="Fio" not-null="false"/>
    <property name="Age" not-null="false"/>
    <property name="EmployeesAmount" not-null="false"/>
  </class>
</hibernate-mapping>



Department.hbm.xml
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="NHibernateTest"
                   namespace="NHibernateTest.Infrastructure.Domain">
  <class name="NHibernateTest.Infrastructure.Domain.Department" table="Department" lazy="true">
    <id name="Id" column="Id" type="Int32">
      <generator class="identity" />
    </id>
    <property name="Name" not-null="false"/>
    <list name="Persons" table="DepartmentsAndEmployees" cascade="all">
      <key column="DepartmentId"/>
      <index column="Position"/>
      <many-to-many column="EmployeeId" class="NHibernateTest.Infrastructure.Domain.Employee"/>
    </list>
  </class>
</hibernate-mapping>



В последнем файле мапятся сущности Employee. Я не знаю, как сделать еще и для Boss. Как сдеать это самое "наследование" для сущностей?
...
Рейтинг: 0 / 0
Мапирование коллекции сущностей с общим предком в NHibernate
    #38999819
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может это поможет
...
Рейтинг: 0 / 0
Мапирование коллекции сущностей с общим предком в NHibernate
    #38999821
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Мапирование коллекции сущностей с общим предком в NHibernate
    #39000163
NDAleksey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmawможет это поможет



да, спасибо, как раз это и помогло!)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Мапирование коллекции сущностей с общим предком в NHibernate
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]