2010-08-10 3 views
0

Я пытаюсь сопоставить новую модель домена с устаревшей базой данных с фиксированной схемой и зациклился на том, как сделать определенный тип сопоставления. Вот дистилляция моей проблемы.NHibernate - лучший способ сопоставления со вторичным ключом

Есть виды рабочих. Например, HourlyWorker и SalariedWorker.

Данные для HourlyWorker хранятся в таблице WORKERS и таблице HOURLY_WORKERS со стандартным отношением внешних ключей между двумя из WORKERS.PK_WORKERS = HOURLY_WORKERS.FK_WORKERS.

«Id» of HourlyWorker с точки зрения NHibernate сопоставляется с WORKERS.PK_WORKERS, что и должно быть.

Пока все хорошо.

Теперь предположим, что есть объект, который применяется только к почасовым работникам.

class Timesheet 
    HourlyWorker Owner { get; private set; } 

В унаследованной базе этого сопоставлено таблице расписаний в довольно простом способе, но с одним уловом: Зарубежный ключом ссылка на владелец выражается не через ссылку на таблицу РАБОТНИКА, а через ссылку на таблицу HOURLY_WORKER. Другими словами, внешний ключ FK_HOURLY_WORKER является уникальным идентификатором, но является не, указывая на значение, которое находится в представлении NHibernate на первичный ключ.

Я не могу просто изменить Id HourlyWorker для отображения таблицы HOURLY_WORKER, потому что 70% базы данных, ссылающейся на часовых работников, использует первичный ключ из WORKER в качестве идентификатора внешнего ключа.

Каковы мои возможности для сопоставления этих отношений?

Что-то, что может сделать это проще: собственность Владельца доступна только для чтения - Расписание не может быть изменено. Тем не менее, когда HourlyWorker удаляется, удаленные должны каскадироваться на все их расписания.

И наконец, пожалуйста, не отвечайте рекомендациями, что я меняю базу данных. Я знаю. Если вам нужен номер телефона моего клиента, чтобы вы могли убедить их, что их схема не самая совершенная вещь, я могу ее предоставить. Я много месяцев борюсь с этим боем. Также не отвечайте, что это указывает на то, что проблема связана с менеджерами, а не только с отображением NHibernate. Я тоже это знаю. На данный момент я просто хочу получить совет о том, как решить техническую проблему.

ответ

2

Я считаю, что вы ищете свойство-реф атрибут многих к одному элементу: NHibernate docs

Кстати, отображение в устаревшую схему трудно - быть готовым к серьезной боли ! С положительной стороны, вы станете экспертом по NHibernate к тому моменту, когда вы выйдете на другую сторону.

Смежные вопросы