Предположим, что у Вас есть наборы Быстрых конвенций, которые относятся к определенным группам отображений, но не всем им.
Моя мысль здесь была, я создам пользовательские атрибуты C#, что я могу обратиться к Быстрому *Классы сопоставления - и записать конвенции, которые определяют принятие путем осмотра *Класс сопоставления, чтобы видеть, был ли пользовательский атрибут применен.
Тем путем я могу выбрать группы конвенций и применить их к различным отображениям, просто отметив их с пользовательским атрибутом - [UseShortNamingConvention] и т.д.
Я плохо знаком с NHibernate (и Быстр, и C# в этом отношении) - действительно ли этот подход возможен?
И действительно ли это нормально?:-)
Спасибо!
Да, это так! Я действительно сделал что-то похожее, но вместо этого использовал интерфейсы маркеров (INotCacheable, IComponent), но интерфейс маркера или атрибут, не должно быть такой большой разницы.
При применении ваших соглашений, просто проверьте наличие вашего атрибута и все в порядке :)
EDIT:
Добавляю несколько примеров кода
public class MyMappingConventions : IReferenceConvention, IClassConvention
{
public void Apply(IOneToManyCollectionInstance instance)
{
instance.Key.Column(instance.EntityType.Name + "ID");
instance.LazyLoad();
instance.Inverse();
instance.Cascade.SaveUpdate();
if ((typeof(INotCacheable).IsAssignableFrom(instance.Relationship.Class.GetUnderlyingSystemType())))
return;
instance.Cache.ReadWrite();
}
public void Apply(IClassInstance instance)
{
instance.Table(instance.EntityType.Name + "s");
//If inheriting from IIMutable make it readonly
if ((typeof(IImmutable).IsAssignableFrom(instance.EntityType)))
instance.ReadOnly();
//If not cacheable
if ((typeof(INotCacheable).IsAssignableFrom(instance.EntityType)))
return;
instance.Cache.ReadWrite();
}
}