一个棘手的问题 - 请耐心等待。任何帮助不胜感激。Multipe“角色”的子类映射
我有一个表/类联系人(PK Id)和两个派生的客户端和债务人(PK和FK ContactId)。第四个表格Case具有债务人和客户端的外键(下面的映射)。
一开始一切正常。但后来我碰到了一些数据,其中一个联系人在一个案例中是客户,而在另一个案例中是债务人。如果这些都在一个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])
好像会话一级缓存是认识的记录由它的ID,并试图避免读取从SQL数据结果集。当然,演员NH认为必要的重用失败。
不幸的是,更改数据库架构不是一个选项。这是一个遗留系统。 (一个模式是好的,干净的IMO)
不知道它是否重要:类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)
...
}
我不认为它可能没有黑客,因为它违背NH的有关对象的身份并OOP校长的假设,因为对象不能同时是2种不同类型的时间。 – Firo
我知道你不能改变模式,但是你可以添加一个模式的视图吗? – eulerfx