使用方法:使用同一个表中的不同业务逻辑映射(NHibernate)多个类?

Ted*_*Net 3 c# nhibernate inheritance components table-per-class

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

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

我已经考虑过使用inheritence,每个类的表,因为表符合要求(没有具有非空约束的列).这不是一个合乎逻辑的步骤,因为每种类型的业务完全不同(只有一些共同点是userId,description和remarks).也许是一个组件?但是如何将属性映射到3个不同的类而没有基类或除表名之外的任何类型的链接?

我希望你们明白我写的是什么.我还没有真正的代码,我只是在纸上写了一些关于如何处理这段代码的东西.

谁在这里可以帮助我的路上?

亲切的问候,泰德

Ste*_*ger 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
{
  // ...
}
Run Code Online (Sandbox Code Playgroud)

制图:

<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>
Run Code Online (Sandbox Code Playgroud)