У меня есть существующая схема базы данных и вы хотите заменить код доступа к данным на Fluent.NHibernate. Схема базы данных не может быть изменена, поскольку она уже существует в продукте доставки. И предпочтительно, если объекты домена не изменялись или минимально изменялись.FluentNHibernate сопоставление составных внешних ключей
Я имею выполните картирование Trouble одну необычную конструкцию схемы, показанную со следующей структурой таблицы:
CREATE TABLE [Container] (
[ContainerId] [uniqueidentifier] NOT NULL,
CONSTRAINT [PK_Container] PRIMARY KEY (
[ContainerId] ASC
)
)
CREATE TABLE [Item] (
[ItemId] [uniqueidentifier] NOT NULL,
[ContainerId] [uniqueidentifier] NOT NULL,
CONSTRAINT [PK_Item] PRIMARY KEY (
[ContainerId] ASC,
[ItemId] ASC
)
)
CREATE TABLE [Property] (
[ContainerId] [uniqueidentifier] NOT NULL,
[PropertyId] [uniqueidentifier] NOT NULL,
CONSTRAINT [PK_Property] PRIMARY KEY (
[ContainerId] ASC,
[PropertyId] ASC
)
)
CREATE TABLE [Item_Property] (
[ContainerId] [uniqueidentifier] NOT NULL,
[ItemId] [uniqueidentifier] NOT NULL,
[PropertyId] [uniqueidentifier] NOT NULL,
CONSTRAINT [PK_Item_Property] PRIMARY KEY (
[ContainerId] ASC,
[ItemId] ASC,
[PropertyId] ASC
)
)
CREATE TABLE [Container_Property] (
[ContainerId] [uniqueidentifier] NOT NULL,
[PropertyId] [uniqueidentifier] NOT NULL,
CONSTRAINT [PK_Container_Property] PRIMARY KEY (
[ContainerId] ASC,
[PropertyId] ASC
)
)
Существующая модель предметной области имеет следующую структуру класса:
alt text http://yuml.me/4e2bcb95
Класс недвижимости содержит другие участники, представляющие имя и стоимость имущества. Классы ContainerProperty и ItemProperty не имеют дополнительных членов. Они существуют только для идентификации владельца недвижимости. Классы Container и Item имеют методы, которые возвращают коллекции ContainerProperty и ItemProperty соответственно. Кроме того, класс Container имеет метод, который возвращает коллекцию всех объектов Property в графе объектов. Мое лучшее предположение заключается в том, что это был либо метод удобства, либо унаследованный метод, который никогда не удалялся.
Бизнес-логика в основном работает с Item (как совокупный корень) и работает только с контейнером при добавлении или удалении элементов.
Я пробовал несколько методов для сопоставления этого, но никто не работает, поэтому я не буду включать их сюда, если кто-то не попросит их. Как бы вы нарисовали это?