|
Маппинг двух связанных таблиц в NHibernate
|
|||
---|---|---|---|
#18+
День добрый. Есть две таблицы. Person (персона) и FamilyPerson (история смены имен персоны). У персоны всегда одно активное имя. Поэтому в классе, описывающего персону есть свойство типа FamilyPerson. А в таблице FamilyPerson признак активной записи? Как замапить свойство FamilyPerson для класса Person? Referens() не подходит, т.к. в таблице Person нет ссылки на FamilyPerson в старом коде это делалось простым JOIN FamilyPerson ON FamilyPerson.Person_ID = FamilyPerson.ID AND FamilyPerson.Active = 1 тут есть описание подобной ситуации, я так понимаю что добавление в таблицу Person ссылки на активную запись в таблице FamilyPerson решило бы все проблемы, но старый код, добавляющий записи в эту таблицу перелопачивать нет смысла. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2011, 21:14 |
|
Маппинг двух связанных таблиц в NHibernate
|
|||
---|---|---|---|
#18+
У нас, например, была сущность (в 1 таблице), и коллекция этапов сущности (в 2 таблице). Маппились просто как коллекция одних сущностей внутри другой. А бизнес-логика брала для данной сущности из 1 таблицы все её этапы (из внутренней коллекции) и делала where enddate == null, т.к. у этапа были дата начала и дата конца (null, если он текущий). И было поле CurrentStage в 1 сущности, тут, конечно, еще была проблема со вставкой (1 сущность указывала этим полем на 2, а 2 на 1), но мы одно из полей сделали nullable, и проблема решилась. Что за старый код, что он делает и почему его нельзя перелопачивать? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2011, 13:07 |
|
Маппинг двух связанных таблиц в NHibernate
|
|||
---|---|---|---|
#18+
NHibernate_User_Маппились просто как коллекция одних сущностей внутри другой. Это понятное решение, и самое неэффективное, т.к. таких таблиц, на самом деле очень много. Например, у конкретной персноны кроме таблицы смены имен, есть таблица смены адресов, личных дел, мест работы, паспортов, и т.д. Поэтому в классе описывающем конкретную персону хочется иметь не коллекции этих данных а текущее состояние. Но как это замапить никак не могу сообразить. Понимаю, что надо смотреть в сторону HasOne.. NHibernate_User_Что за старый код, что он делает и почему его нельзя перелопачивать? Старый код - то что сейчас работает, написано без ORM и размазано и по клиенту и по PL/SQL. Хотелось бы полностью перевести функциональность в новый код с использованием ORM и после этого и проводить рефакторинг базы. Если это делать сейчас - придется править и старый (работающий в настоящее время код). По крайней мере в тех местах, где без этого можно обойтись (может кроме особо критичных мест) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2011, 14:43 |
|
Маппинг двух связанных таблиц в NHibernate
|
|||
---|---|---|---|
#18+
PassingMan, вы хотите только читать c помощью NHibernate, или писать тоже планируется? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2011, 10:31 |
|
Маппинг двух связанных таблиц в NHibernate
|
|||
---|---|---|---|
#18+
SolYUtor, И читать, и писать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2011, 10:16 |
|
Маппинг двух связанных таблиц в NHibernate
|
|||
---|---|---|---|
#18+
PassingMan, В общем сейчас мне видится два варианта: 1. Если в таблице FamilyPerson нет своего id( не Person_Id, а именно свой, внутренний) тогда можно замапить его в классе Person как many-to-one. 2. Если своего идентификатора нет, то можно попробовать его добавить. Хотя бы простой sequence/identity :) 3. Если своего идентификатора нет, то надо маппить класс FamilyPerson как one-to-one, с генератором id типа foreign, и условием where Active = 1. Это будет работать для чтения, а вот для записи придётся городить танцы с бубном. И честно говоря, на данный момент даже не могу придумать хороший способ сделать это. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2011, 21:46 |
|
Маппинг двух связанных таблиц в NHibernate
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2011, 19:22 |
|
|
start [/forum/topic.php?fid=17&fpage=41&tid=1350623]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 140ms |
0 / 0 |