3

我目前正在使用一个棕地数据库,其中包含一个包含 3 种不同业务类型的数据的表。它与 SalesOrders 和 orderlines 有关。在旧应用程序中,我们能够为每个销售订单添加 3 种类型的订单行:产品、小时费率和文本行。15 年前,这是一种快速而肮脏的解决方案,可以在 Delphi 中轻松查询以在一个数据网格中获取所有行。每一个

现在我正在尝试使用 NHibernate 在 C# 中构建对象模型。我已经制作了 3 个没有基类的单独实体,因为这 3 种线型没有真正的业务逻辑连接。但是,我想将这 3 种类型放在一个列表中,以便我可以订购它们。

我考虑过使用继承,每个类的表,因为表满足要求(没有非空约束的列)。但这不是一个合乎逻辑的步骤,因为每种类型的业务完全不同(只有共同点是用户 ID、描述和备注)。也许是一个组件?但是如何将属性映射到 3 个没有基类或除表名之外的任何类型的链接的不同类?

我希望你们能理解我写的东西。我还没有真正的代码,我只是在纸上画了一些关于如何处理这些代码的东西。

这里有人可以帮助我吗?

亲切的问候,特德

4

1 回答 1

6

您可以在三个实体上放置一个接口并将其映射为基类,全部映射到同一个表:

interface IWhatever 
{
  // central Id for the whole table
  int Id { get; set; }
  // may be some more properties
}

class Product : IWhatever
{
  // ...
}

class HourlyRate : IWhatever
{
  // ...
}

class TextLines : IWhatever
{
  // ...
}

映射:

<class name="IWhatever" table="MyBigTable">

  <id .../>
  <discriminator column="Type"/>
  <subclass name="Product" discriminator-value="P">
    <!-- ... -->
  </subclass>
  <subclass name="HourlyRate" discriminator-value="HR">
    <!-- ... -->
  </subclass>
  <subclass name="TextLines" discriminator-value="TL">
    <!-- ... -->
  </subclass>
</class>
于 2011-04-29T11:43:18.367 回答