Castle ActiveRecord类表继承

时间:2010-06-19 11:22:35

标签: nhibernate inheritance castle-activerecord

我正在尝试创建类表继承,如(http://www.castleproject.org/activerecord/documentation/trunk/usersguide/typehierarchy.html

所以我想说我有两节课:

[ActiveRecord("entity"), JoinedBase]
public class Entity : ActiveRecordBase
{
  private int id;
  private string name;
  private string type;

  ...and properties
}

[ActiveRecord("entitycompany")]
public class CompanyEntity : Entity
{
  private byte company_type;
  private int comp_id;

  [JoinedKey("comp_id")]
  public int CompId
  {
    get { return comp_id; }
    set { comp_id = value; }
  }
}

似乎没问题,所有测试都没问题。我在分析器中看到的一件事让我很生气,如果在其他类中使用Entity(它是一个属性)(让我们称之为World),那么在Entity和CompanyEntity上获取World外部连接的结果。 我希望它只是一个实体的加入!

任何人都可以帮助我并解释为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

ActiveRecord(实际上是NHibernate)必须在CompanyEntity上进行左连接,因为它必须知道实体的实际类型。如果不加入CompanyEntity,它就不可能知道它是否是一个CompanyEntity,因此它不会知道要实例化的

换句话说,如果没有这个左连接,你的类层次结构就会破坏。

它并没有真正导致任何重大的性能问题,但如果它困扰你那么多尝试切换到另一种继承策略,如鉴别器。