如何在NHibernate中将现有表映射到继承层次结构?

时间:2011-09-29 01:06:07

标签: c# nhibernate fluent-nhibernate

问题是尝试在给定现有表结构的情况下映射继承。该表也被使用原始sql的旧版应用程序使用,即该表不能删除任何现有的架构详细信息,但可以向其中添加更多内容。

现有表已经映射,并且基本上有一堆字段存在以下问题....

所以现有的课程

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)
    )

并将A更改为

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”上的“客户端”,作为一种覆盖。

我该怎么做?我可以这样做吗?

或者是否可能在表“Base”上根本没有“Client”,然后在所有子类表上定义“Client”? (这将使查询变得有趣)

1 个答案:

答案 0 :(得分:0)