NHibernate и multikey
От: zverjuga Беларусь  
Дата: 28.06.10 16:36
Оценка:
добрый день.

имею следующую проблему. в проекте используется 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

в нхибернейте не силен, потому был бы благодарен за подсказку, в какую сторону нужно порыть.
проклятый антисутенерский закон
Re: NHibernate и multikey
От: Ziaw Россия  
Дата: 28.06.10 18:06
Оценка: 4 (1) :)
Здравствуйте, zverjuga, Вы писали:

Z>соответственно, в объекте тоже создаю два проперти, которые соответствуют этим полям. но во время запуска проекта получаю эксепшн


Z>composite-id class must override Equals(): PayDayLoan.Business.Flag


Z>в нхибернейте не силен, потому был бы благодарен за подсказку, в какую сторону нужно порыть.


В сторону переопределения метода Equals в PayDayLoan.Business.Flag

Ваш КО.

P.S. Вместе с ним надо переопределить GetHashCode()
Re[2]: NHibernate и multikey
От: zverjuga Беларусь  
Дата: 28.06.10 20:05
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>В сторону переопределения метода Equals в PayDayLoan.Business.Flag


Z>Ваш КО.


Z>P.S. Вместе с ним надо переопределить GetHashCode()


благодарю, все работает.
проклятый антисутенерский закон
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.