Castle ActiveRecord Класс Наследование таблиц - PullRequest
0 голосов
/ 19 июня 2010

Я пытаюсь создать наследование таблиц классов, как в (http://www.castleproject.org/activerecord/documentation/trunk/usersguide/typehierarchy.html)

Допустим, у меня есть 2 класса:

[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), то выборка World приводит к левому внешнему объединению как Entity, так и CompanyEntity. Я ожидаю, что это будет просто присоединение к Entity!

Может кто-нибудь помочь мне с этим и объяснить, почему это происходит?

1 Ответ

2 голосов
/ 19 июня 2010

ActiveRecord (на самом деле NHibernate) должен выполнить левое соединение с CompanyEntity, потому что он должен знать, какой тип сущности на самом деле. Без оставленного присоединения к CompanyEntity он не может знать, является ли это CompanyEntity или нет, поэтому он не будет знать что создать.

Другими словами, без этого левого соединения ваша иерархия классов сломалась бы.

Это на самом деле не вызывает каких-либо существенных проблем с производительностью, но если вам это сильно мешает, попробуйте переключиться на другую стратегию наследования, такую ​​как дискриминатор.

...