сложная проблема - пожалуйста, потерпите меня.Любая помощь с благодарностью.
У меня есть таблица / класс Contact (PK Id) и два производных клиента и должника (PK и FK ContactId).Case 4-й таблицы имеет внешние ключи для должника и клиента (приведенные ниже сопоставления).
Сначала все работало нормально.Но затем я получаю некоторые данные, когда один и тот же контакт является клиентом в одном деле, а должником - в другом.Если они читаются в одном запросе nhibernate, например Session.Query<Case>().Fetch(c => c.Debtor).Fetch(c => c.Client)
, появляется
NHibernate.WrongClassException
"Object with id: {someGuid...} was not of the specified subclass: Client
(loading object was of wrong class [Debtor])
Похоже, что кэш первого уровня сеанса распознает запись по его идентификатору и пытается избежать чтения данных из набора результатов sql,Конечно, приведение NH считает необходимым, чтобы повторное использование не удалось.
К сожалению, изменение схемы БД не вариант.Это устаревшая система.(и схема в порядке и чиста ИМО)
Не знаю, важно ли это: класс Contact не является абстрактным.Используются контакты, которые не являются ни клиентами, ни должниками.
Есть ли шанс заставить это работать с этими многоконтактными контактами?Заранее спасибо.
public partial class ContactMap : ClassMap<Contact>
{
public ContactMap()
{
Id(x=>x.Id).GeneratedBy.Guid();
Map(x=>x.FirstName);
Map(x=>x.Name1).Not.Nullable();
...
}
}
public class DebtorMap : SubclassMap<Debtor>
{
public DebtorMap()
{
KeyColumn("ContactID");
Table("[dbo].[Debtor]");
Map(x => x.MaritalStatus);
...
}
}
public partial class ClientMap : SubclassMap<Client>
{
public ClientMap()
{
KeyColumn("ContactID");
Map(x => x.ClientNo).Not.Nullable();
...
}
}
public partial class CaseMap : ClassMap<Case>
public CaseMap()
{
...
References<Client>(x=>x.Client)
References<Debtor>(x=>x.Debtor)
...
}