问题是试图映射现有表结构的继承。该表还被传统应用程序使用原始sql使用,即该表不能删除任何现有的模式细节,但可以添加更多。如何将现有表映射到NHibernate中的继承层次结构?
现有表已被映射,并且基本上具有一堆具有以下问题字段....
所以现有的类
class A
{
// Id etc
public virtual Client Client { get; set; }
}
与像
table A (
Id INT IDENTITY NOT NULL,
Client_id INT null,
primary key (Id)
)
表结构
现在我想介绍一个基类
class Base
{
// Id etc
public virtual Client Client { get; set; }
}
这将结束与一个表像...
table Base (
Id INT IDENTITY NOT NULL,
Client_id INT null,
primary key (Id)
)
和更改
class A : Base
{
// clients moved to the base...
}
这将做这样的事情表: -
table A(
Base_id INT IDENTITY NOT NULL,
Id INT not null, // I will need to keep the existing Id field...
Client_id INT null, // this Client now conflicts with the Base client
primary key (Base_id)
)
我使用每个类继承的表。
问题是....
“客户”将是“基地”的表,也这是对“A”的现有表。我希望能够继续使用“A”上的“客户端”作为一种覆盖。
我该怎么做?我可以这样做吗?
还是有可能在表“基地”它根本没有'客户端',然后在他们定义“客户端”的所有子类表上? (这将使查询有趣)
这整个“A”“基地”支持查询“客户”真的让你的问题很难理解我。你能提供一个你的表结构和类的减少版本吗?将更容易确定映射要求是什么。 – Phill
试图使它更清晰:-)基本问题是客户端出现在两个表中的字段,通常当你的子类只有基地。至少就我的理解而言。 –
嗯,客户端真的不会继承,如果你有客户端的基础上,它在子表上有什么不同。如果你将基地4存放在基地上,并且用基地层级中的客户端7'覆盖'它,那么基地如何更新为7呢?我不认为基地真的被用作“基地”,更像是自己的基地。 – Phill