Свободно унаследованная карта NHibernate - PullRequest
0 голосов
/ 11 января 2011

В настоящее время мы работаем над унаследованным приложением, и мы заменяем доступ к данным на NHibernate, поскольку старый доступ к данным не выполнял рыхлую / ленивую загрузку, части системы выполняли более 2000 запросов для создания отношений ...

Все хорошо, за исключением того, что я абсолютно не знаю, как отобразить один сценарий.

У нас есть 'Shift' и 'MultiResourceShift'

public class Shift
{
    public int Id { get; protected set; }
    public string EmployeeName { get; set; }
    public IEnumerable Breaks { get; set; }
    ...
}

Multi Resource Shiftс другой стороны, фактически это сдвиг, в котором может быть назначено несколько сотрудников.

public MultiResourceShift : Shift
{
    public IEnumerable Employees { get; set; }
    public bool IsMultiResource { get; set; }
}

Структура базы данных отображается как один-ко-многим, например:

+--------------------+
| Shift           |
+--------------------+
| ShiftId            |
| EmployeeName       |
| IsMultiResource    |
| ...                |
+--------------------+
+--------------------+
| MultiResourceShift |
+--------------------+
| MultiResourceId    |
| ShiftId            |
| EmployeeId         |
| ...                |
+--------------------+

В идеале это необходимо запрашивать, когда результат возвращает коллекцию Shifts или MultiResourceShifts.

На данный момент это достигается путем перебора ридера, и если это Shift, он отображается и добавляется в коллекцию, если это Multi Resource, создается экземпляр MultiResourceShift и заполняется из данных сдвига,и сотрудники загружаются, а затем добавляются в коллекцию.

Кто-нибудь знает, возможно ли это, как я могу сопоставить его и запросить его.

1 Ответ

0 голосов
/ 25 февраля 2011

http://nhforge.org/blogs/nhibernate/archive/2011/02/16/get-load-polymorphism-in-nhibernate-3.aspx

Этот пост в блоге NH - это именно то, что я написал и решил проблемуМы немного изменили нашу модель, чтобы создать дискриминатор.

...