добрый день.
имею следующую проблему. в проекте используется nhibernate для выборки данных из базы. в базе есть таблица, которая содержит два первичных ключа, причем они могут быть полностью уникальными только в паре. есть хранимая процедура, которая делает выборку из двух таблиц, используя эти ключи. если работать только с одним ключом, то процедура вернет несколько записей, у которых ключи одинаковые. в принципе это не страшно, но нхибернейт в таком случае тупо кэширует объекты. то есть, база мне возвращает записи с разными значениями (кроме ключей), а нхибернейт отдает мне объекты, которые соответствуют полученным данным, но которые заполнены одинаковыми закэшированными объектами.
база так уж устроена, что уникальными могут быть только пара ключей. поэтому их нужно правильно замапить.
вот структура таблицы в базе.
поля ClientId и FlagDefId — являются ключами.
CREATE TABLE [dbo].[tblClientTriggeredFlags](
[ClientId] [uniqueidentifier] NOT NULL,
[FlagDefId] [uniqueidentifier] NOT NULL,
[DateActivated] [datetime] NOT NULL CONSTRAINT [DF_tblClientTriggeredFlags_DateActivated] DEFAULT (getdate()),
CONSTRAINT [PK_tblClientTriggeredFlags] PRIMARY KEY CLUSTERED
(
[ClientId] ASC,
[FlagDefId] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
USE [PayDayLoan]
GO
ALTER TABLE [dbo].[tblClientTriggeredFlags] WITH CHECK ADD CONSTRAINT [FK_tblClientTriggeredFlags_tblClient] FOREIGN KEY([ClientId])
REFERENCES [dbo].[tblClient] ([Id])
GO
ALTER TABLE [dbo].[tblClientTriggeredFlags] WITH CHECK ADD CONSTRAINT [FK_tblClientTriggeredFlags_tblFlagDefinitions] FOREIGN KEY([FlagDefId])
REFERENCES [dbo].[tblFlagDefinitions] ([Id])
замапить я из пытаюсь так
<composite-id>
<key-property name="ClientId" column="ClientId" />
<key-property name="FlagDefId" column="FlagDefId" />
</composite-id>
соответственно, в объекте тоже создаю два проперти, которые соответствуют этим полям. но во время запуска проекта получаю эксепшн
composite-id class must override Equals(): PayDayLoan.Business.Flag
в нхибернейте не силен, потому был бы благодарен за подсказку, в какую сторону нужно порыть.
Здравствуйте, zverjuga, Вы писали:
Z>соответственно, в объекте тоже создаю два проперти, которые соответствуют этим полям. но во время запуска проекта получаю эксепшн
Z>composite-id class must override Equals(): PayDayLoan.Business.Flag
Z>в нхибернейте не силен, потому был бы благодарен за подсказку, в какую сторону нужно порыть.
В сторону переопределения метода Equals в PayDayLoan.Business.Flag
Ваш КО.
P.S. Вместе с ним надо переопределить GetHashCode()
Здравствуйте, Ziaw, Вы писали:
Z>В сторону переопределения метода Equals в PayDayLoan.Business.Flag
Z>Ваш КО.
Z>P.S. Вместе с ним надо переопределить GetHashCode()
благодарю, все работает.