беглое отображение nHibernate - PullRequest
1 голос
/ 28 декабря 2008

Я работаю на устаревшей системе и ввел свободное владение nHibernate, но у меня есть одно последнее сопоставление, которое, как мне кажется, не может работать.

Код:

public class Permit
    {
    public int PermitId { get; set; }
    public char Discipline { get; set; }
    public PermitDetails PermitDetails { get; set; }
    }

public PermitDetails
    {
    public int PermitId { get; set; }
    }

public class GasPermitDetails : PermitDetails
    {
       ... permit details
    }

public class ElectricalPermitDetails : PermitDetails
    {
       ... permit details
    }

Схема:

*tblPermit*
PermitId, int
Discipline, char
.... some other columns

*tblGas*
PermitId, int
....gasDetails

*tblElectrical*
PermitId, int
....electrical details

Если tblPermit.Discipline равно "G", нам нужно получить данные из tblGas. Если tblPermit.Discipline равно "E", нам нужно получить данные из tblElectrical. Я бездельничаю, пытаясь выяснить это, но пока мне не повезло.

Ответы [ 2 ]

0 голосов
/ 28 декабря 2008

(если tblPermit.Discipline равен "G", мы Нужно получить данные из ТБГ. если tblPermit.Discipline это "E", нам нужно получить данные из tblElectrical). я возиться, пытаясь получить это разобрался но не повезло пока что.

Поле дискриминатора не имеет значения, поскольку поля PK подтипов в любом случае являются FK для таблицы их супертипа. Так что это отображение таблицы на подтип.

0 голосов
/ 28 декабря 2008

Мне кажется, что схема вышла правильно. Возможно, вам нужно быть более конкретным в отношении проблемы, которую вы имеете, потому что я понимаю, что PermitId для всех подклассов PermitDetails становится внешними ключами для соответствующих таблиц отношений.

Например. для дисциплины «газ» в соответствующем разрешении должна быть информация о газе для разрешения. Он имеет отношение, если PermitID в tblGas является внешним ключом для идентификатора tblPermit. Как это:

+---------------+         +----------------------+
|               | 1     1 |                      |
|   tblPermit   |<------->| tblGas               |
|               |         | (for gas discipline) |
|               |         |                      |
+---------------+         +----------------------+
|               |         |                      |
| {PK} PermitId |         | {FK} PermitID        | <- ForeignKey to tblPermit.PermitID
|               |         |                      |
+---------------+         +----------------------+

Вам не понадобится столбец Discipline, чтобы выбрать правильные данные. Вам нужен только один запрос, который ищет tblElectrical, tblGas по идентификатору разрешения. Таким образом, вы получите свое разрешение вместе с информацией.

(PS. Извините, что я использую диаграмму классов UML для визуализации таблиц базы данных, но нотация «гусиные лапки» плохо переводится в ASCII)

...