Свободное владение различными соглашениями для разных базовых типов - PullRequest
1 голос
/ 08 октября 2010

В данный момент мы сохраняем все сущности и отображения в одной сборке. Наши сущности получены из базового класса Entity, который является EntityWithTypedId

Также у нас есть соглашение по именам таблиц, в котором говорится, что имена таблиц должны быть множественными.

Теперь я хочу создать два других базовых типа, например. AggregateRootEntity и AggregateEntity являются производными от Entity. И я хотел бы создать два набора соглашений для обеих базовых сущностей:

Скажем так: Для всех сущностей, полученных из таблиц AggregateRootEntity, следует использовать префикс «ag_», а идентификатор генерируется пошагово, но для всех сущностей, полученных из таблиц AggregateEntity, следует добавлять префикс «a_», и следует назначать идентификаторы.

Можно ли устанавливать условные обозначения на основе некоторых условий?

1 Ответ

1 голос
/ 17 ноября 2010

Вы можете сделать это с несколькими соглашениями, каждый проверяя определенный тип в своих методах Accept

что-то вроде:

public class LegacyEntityTableConvention : IClassConvention, IClassConventionAcceptance
{
  public void Accept(IAcceptanceCriteria<IClassInspector> criteria)
  {
    criteria.Expect(x => x.EntityType.IsAny(typeof(OldClass), typeof(AnotherOldClass)));
  }

  public void Apply(IClassInstance instance)
  {
    instance.Table("tbl_" + instance.EntityType.Name);
  }
}

Просто блок кода из FNH Wiki http://wiki.fluentnhibernate.org/Acceptance_criteria

...