Используя пользовательский C# приписывает избранным Быстрым конвенциям

Предположим, что у Вас есть наборы Быстрых конвенций, которые относятся к определенным группам отображений, но не всем им.

Моя мысль здесь была, я создам пользовательские атрибуты C#, что я могу обратиться к Быстрому *Классы сопоставления - и записать конвенции, которые определяют принятие путем осмотра *Класс сопоставления, чтобы видеть, был ли пользовательский атрибут применен.

Тем путем я могу выбрать группы конвенций и применить их к различным отображениям, просто отметив их с пользовательским атрибутом - [UseShortNamingConvention] и т.д.

Я плохо знаком с NHibernate (и Быстр, и C# в этом отношении) - действительно ли этот подход возможен?

И действительно ли это нормально?:-)

Спасибо!

1
задан mindplay.dk 13 July 2010 в 20:54
поделиться

1 ответ

Да, это так! Я действительно сделал что-то похожее, но вместо этого использовал интерфейсы маркеров (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();
        }
}
2
ответ дан 2 September 2019 в 23:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: