Отображение представлений SQL с помощью NHibernate и внешних ключей - PullRequest
0 голосов
/ 22 февраля 2012

В моем решении у меня есть следующие проекты

MySystem.Core
MySystem.Core.Data

MySystem.MyAudit1.Core
MySystem.MyAudit1.Core.Data

MySystem.MyAudit2.Core
MySystem.MyAudit2.Core.Data

Число проектов аудита может потенциально вырасти примерно до 20.

Для всех проектов аудита требуется таблица справочных данных "Организация",Вместо того чтобы дублировать одну и ту же таблицу справочных данных по всем проектам аудита 20 раз и попытаться синхронизировать их, я планирую создать в основном проекте «главную» организационную таблицу.

Это будет содержать код и описаниедля всех организаций.Затем в каждом конкретном проекте аудита есть таблица OrganisationCode, которая содержит только коды Org, относящиеся к этому аудиту, но не описание, и имеет представление в базе данных аудита, которое ищет описание из основной таблицы Org следующим образом:

CREATE VIEW Organisation AS
SELECT d.OrganisationCodeId as 'OrganisationId', d.Code, a.[Description]
FROM MyAudit1.dbo.OrganisationCode d
INNER JOIN [Core].dbo.OrganisationCode a ON d.Code = a.Code

Это будет означать, что, если описания Org изменятся, их можно будет обновить в одном месте и отразить во всех аудитах.

Однако, поскольку у вас не может быть внешних ключей в представлениях в SQL, я создалвнешний ключ между таблицей OrganisationCode и любой другой таблицей в базе данных аудита.

Как я обнаружил, это, конечно, заставляет NHibernate попытаться вернуть OrganisationCode таблицу , а не организацию view и приводит к падению моего создания SessionFactory, так как Nhibernate ищет OrganisationId в таблице OrganisationCode.

Существует ли простой способ обойти это, что позволит мне выполнить поиск по одному описанию восновной проектдля справочных данных, которые можно использовать в дочерних проектах

1 Ответ

0 голосов
/ 23 февраля 2012

Да, таблицы аудита распределены по отдельным БД, но я дошел до пути моей проблемы.

Причина, по которой мое создание SessionFactory было прервано, заключается в том, что Конфигурация передавалась сборке данных аудита для сопоставления, а файл сопоставления моей организации находился в сборке основных данных.

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

Спасибо за внимание.

...