powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Fluent NHibernate мэппинг vs. разные типы наследования
5 сообщений из 5, страница 1 из 1
Fluent NHibernate мэппинг vs. разные типы наследования
    #36723667
barser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть 4 класса:

Document

Contract : Document

ContractWithCompany : Contract

ContractWithPerson : Contract

В базе для этого заведены 2 таблицы:


Documents (ID, ...)

Contracts (FK_DOCUMENT, CONTRACT_TYPE,....)

где FK_DOCUMENT - ссылка на ID (стратегия наследования TABLE-PER-SUBCLASS)
CONTRACT_TYPE - текстовое поле с указанием класса ( стратегия наследования TABLE-PER-CLASS-HIERARCHY).

Если по отдельности обе эти стратегии наследования работают, однако не получается совместить их вместе - в одной цепочке наследования. То есть, пишу мэппинг (Fluent NHibernate 1.0 RTM):
Код: plaintext
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.
DocumentMap : ClassMap<Document>
{
    public DocumentMap(){
        Id(x=>x.Id) и т.д.
        .........
    }
}

ContractMap : SubclassMap<Contract>
{
    public ContractMap() {
        вот здесь бы мне вызвать метод DiscriminateSubClassesByColumn("CONTRACT_TYPE") - но почему-то этот метод отсутствует в SubclassMap, хотя он есть и нормально работает в ClassMap...
    }
}

ContractWithCompanyMap : SubclassMap<ContractWithCompany>{
    public ContractWithCompanyMap() {
        DiscriminatorValue("COMPANY");
         ......
    }
}

ContractWithPersonMap : SubclassMap<ContractWithPerson>{
    public ContractWithPersonMap() {
        DiscriminatorValue("PERSON");
         ......
    }
}
...
Рейтинг: 0 / 0
Fluent NHibernate мэппинг vs. разные типы наследования
    #36726306
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем вам дискриминатор в таблице Contracts? Он у вас будет в таблице Document, а с Contract будет связь 1-1. В соответствующих подклассах замапите только нужные поля.
...
Рейтинг: 0 / 0
Fluent NHibernate мэппинг vs. разные типы наследования
    #36737482
barser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SolYUtorА зачем вам дискриминатор в таблице Contracts? Он у вас будет в таблице Document, а с Contract будет связь 1-1. В соответствующих подклассах замапите только нужные поля.

В том-то и вопрос - мне не нужен дискриминатор в таблице Document, т.к. для стратегии наследования Table-per-subclass он не нужен. Достаточно только наличие связи 1:1 между столбцом ID в таблице DOCUMENT и столбцом FK_DOCUMENT в таблице CONTRACT.
Кроме контрактов будет еще несколько подклассов от документа.

А уже в таблице CONTRACT хотелось бы с помощью столбца с дескриминатором разделять все контракты на несколько подклассов, хранимых в одной этой таблице (Table-per-class-hierarchy).

Вот это и не понимаю как реализовать...

p.s.
Возможно я вас неправильно или не до конца понял... Не могли бы вы пояснить на примере?
...
Рейтинг: 0 / 0
Fluent NHibernate мэппинг vs. разные типы наследования
    #36737487
barser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SolYUtor,

правильно ли я понимаю, что вы предлагаете хранить все свойства подклассов контракта в таблице Document?
...
Рейтинг: 0 / 0
Fluent NHibernate мэппинг vs. разные типы наследования
    #36738202
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barser
В том-то и вопрос - мне не нужен дискриминатор в таблице Document, т.к. для стратегии наследования Table-per-subclass он не нужен. Достаточно только наличие связи 1:1 между столбцом ID в таблице DOCUMENT и столбцом FK_DOCUMENT в таблице CONTRACT.
Кроме контрактов будет еще несколько подклассов от документа.

А уже в таблице CONTRACT хотелось бы с помощью столбца с дескриминатором разделять все контракты на несколько подклассов, хранимых в одной этой таблице (Table-per-class-hierarchy).

Вы неправильно понимаете стратегию Table-per-Subclass. В этой стратегии дискриминатор храниться только в таблице корневого класса, а остальные таблицы связаны с это отношением 1:1.

barser
правильно ли я понимаю, что вы предлагаете хранить все свойства подклассов контракта в таблице Document?

Нет, я хочу сказать, что ваша задача и так решена: в таблице Document у вас храниться ID объекта и его дискриминатор. А в таблице Contract будут лежать три наследованных класса. Будет то же, что вы и хотите, только дискриминатор лежит в Document, и связан с ней 1:1.
Просто замапьте их на эту через joined subclass, не забывая оставить поля nullable.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Fluent NHibernate мэппинг vs. разные типы наследования
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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