我目前正在使用一个棕色地块数据库,该数据库包含一个表,其中包含3种不同类型的业务数据。它与SalesOrders和订单线有关。在旧的应用程序中,我们能够为每个销售订单添加3种类型的订单行:产品,小时费率和文本行。 15年前,这是一个快速而肮脏的解决方案,可以在Delphi中轻松查询以获取一个数据网格中的所有行。每
现在我正在尝试使用NHibernate在C#中构建对象模型。由于这三种线路类型没有真正的业务逻辑连接,我已经制作了3个没有基类的单独实体。但是,我想将这3种类型合并到一个列表中,以便我可以订购它们。
我考虑过使用inheritence,每个类的表,因为表符合要求(没有具有非零限制的列)。这不是一个合乎逻辑的步骤,因为每种类型的业务完全不同(只有一些共同点是userId,description和remarks)。也许是一个组件?但是如何将属性映射到3个不同的类而没有基类或除表名之外的任何类型的链接?
我希望你们明白我写的是什么。我还没有真正的代码,我只是在纸上写了一些关于如何处理这段代码的东西。
这里有谁可以帮我上路?
亲切的问候, 泰德
答案 0 :(得分: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>