powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Маппинг двух связанных таблиц в NHibernate
7 сообщений из 7, страница 1 из 1
Маппинг двух связанных таблиц в NHibernate
    #37412496
PassingMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый. Есть две таблицы. Person (персона) и FamilyPerson (история смены имен персоны). У персоны всегда одно активное имя. Поэтому в классе, описывающего персону есть свойство типа FamilyPerson. А в таблице FamilyPerson признак активной записи? Как замапить свойство FamilyPerson для класса Person? Referens() не подходит, т.к. в таблице Person нет ссылки на FamilyPerson
в старом коде это делалось простым
JOIN FamilyPerson ON FamilyPerson.Person_ID = FamilyPerson.ID AND FamilyPerson.Active = 1
тут есть описание подобной ситуации, я так понимаю что добавление в таблицу Person ссылки на активную запись в таблице FamilyPerson решило бы все проблемы, но старый код, добавляющий записи в эту таблицу перелопачивать нет смысла.
...
Рейтинг: 0 / 0
Маппинг двух связанных таблиц в NHibernate
    #37414587
NHibernate_User_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У нас, например, была сущность (в 1 таблице), и коллекция этапов сущности (в 2 таблице). Маппились просто как коллекция одних сущностей внутри другой.

А бизнес-логика брала для данной сущности из 1 таблицы все её этапы (из внутренней коллекции) и делала where enddate == null, т.к. у этапа были дата начала и дата конца (null, если он текущий).

И было поле CurrentStage в 1 сущности, тут, конечно, еще была проблема со вставкой (1 сущность указывала этим полем на 2, а 2 на 1), но мы одно из полей сделали nullable, и проблема решилась.

Что за старый код, что он делает и почему его нельзя перелопачивать?
...
Рейтинг: 0 / 0
Маппинг двух связанных таблиц в NHibernate
    #37414650
PassingMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NHibernate_User_Маппились просто как коллекция одних сущностей внутри другой.
Это понятное решение, и самое неэффективное, т.к. таких таблиц, на самом деле очень много. Например, у конкретной персноны кроме таблицы смены имен, есть таблица смены адресов, личных дел, мест работы, паспортов, и т.д. Поэтому в классе описывающем конкретную персону хочется иметь не коллекции этих данных а текущее состояние. Но как это замапить никак не могу сообразить. Понимаю, что надо смотреть в сторону HasOne..
NHibernate_User_Что за старый код, что он делает и почему его нельзя перелопачивать?
Старый код - то что сейчас работает, написано без ORM и размазано и по клиенту и по PL/SQL. Хотелось бы полностью перевести функциональность в новый код с использованием ORM и после этого и проводить рефакторинг базы. Если это делать сейчас - придется править и старый (работающий в настоящее время код). По крайней мере в тех местах, где без этого можно обойтись (может кроме особо критичных мест)
...
Рейтинг: 0 / 0
Маппинг двух связанных таблиц в NHibernate
    #37415609
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PassingMan,

вы хотите только читать c помощью NHibernate, или писать тоже планируется?
...
Рейтинг: 0 / 0
Маппинг двух связанных таблиц в NHibernate
    #37424930
PassingMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SolYUtor,
И читать, и писать.
...
Рейтинг: 0 / 0
Маппинг двух связанных таблиц в NHibernate
    #37427997
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PassingMan,

В общем сейчас мне видится два варианта:
1. Если в таблице FamilyPerson нет своего id( не Person_Id, а именно свой, внутренний) тогда можно замапить его в классе Person как many-to-one.
2. Если своего идентификатора нет, то можно попробовать его добавить. Хотя бы простой sequence/identity :)
3. Если своего идентификатора нет, то надо маппить класс FamilyPerson как one-to-one, с генератором id типа foreign, и условием where Active = 1. Это будет работать для чтения, а вот для записи придётся городить танцы с бубном. И честно говоря, на данный момент даже не могу придумать хороший способ сделать это.
...
Рейтинг: 0 / 0
Маппинг двух связанных таблиц в NHibernate
    #37444977
PassingMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SolYUtor1. Если в таблице FamilyPerson нет своего id( не Person_Id, а именно свой, внутренний) тогда можно замапить его в классе Person как many-to-one.

FamilyPerson_id есть.
SolYUtor2. Если своего идентификатора нет, то можно попробовать его добавить. Хотя бы простой sequence/identity :)
3. Если своего идентификатора нет, то надо маппить класс FamilyPerson как one-to-one, с генератором id типа foreign, и условием where Active = 1. Это будет работать для чтения, а вот для записи придётся городить танцы с бубном. И честно говоря, на данный момент даже не могу придумать хороший способ сделать это.
Вот как раз я понимаю, что надо маппить как one-to-one. Но при использовании fluent nhibernate не нашел где можно включить where Active = 1
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Маппинг двух связанных таблиц в NHibernate
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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