Чтобы централизовать часть моей логики для каждого отображения классов FluentNHibernate (особенно для отображения свойств аудита и фактического первичного идентификатора), у меня есть базовый ClassMap с именем AuditedEntityClassMap, который выглядит примерно так:
public class AuditedEntityClassMap<TEntity, T> : ClassMap<TEntity> where TEntity : AuditedPersistentObject<T>
{
public AuditedEntityClassMap()
{
Cache.ReadWrite();
DynamicUpdate();
ApplyId();
this.ChangeAuditInfo();
}
protected virtual void ApplyId()
{
if (typeof(T) == typeof(int))
map.Id(x => x.Id).GeneratedBy.HiLo(HiLoConstants.NHibernateHiLoTable, HiLoConstants.NHibernateHiLoColumn, HiLoConstants.NHibernateHiLoMaxLo);
else if (typeof(T) == typeof(Guid))
map.Id(x => x.Id).GeneratedBy.GuidComb();
else
throw new InvalidIdTypeInClassMappingException("Invalid type set in class mapping: " + typeof(T));
}
}
Мой вопрос заключается в том, что проверка типа универсального средства для определения типа отображения генератора NHibernate, который должен использоваться для его определения, пахнет, и мне интересно, есть ли лучший способ справиться с этим.
- Общий тип для идентификаторов сущностей моего домена используется повсеместно и отлично работает везде (и широко).
- Я бы предпочел не определять идентификаторотображение в ClassMap каждой сущности, если я могу избежать этого.Если это единственный способ сделать это, я буду жить с этим.
Мысли и предложения?