Получение настраиваемых атрибутов, применяемых к сгенерированным объектам, с помощью атрибута MetadataType

В нашем приложении мы используем EF4.0 и генератор сущностей POCO для создания сущностей из базы данных. Чтобы применить аннотацию к данным, мы создаем интерфейсы и реализуем эти интерфейсы в частичных классах, которые мы создали, чтобы соответствовать частичному классу, сгенерированному с помощью EF.

/*Entity Generated Type*/
public partial class SomeEntity : EntityBase
{
    public virtual string SomeProperty
    {
        get {...}
        set {...}
    }
}

/*Interface containing metadata*/
public interface ISomeEntityMetadata
{
    [SomeCustomAttribute]
    string SomeProperty { get; set; }
}

/*Partial matching class for interface*/
[MetadataType(typeof(ISomeEntityMetadata))]
public partial class SomeEntity : ISomeEntityMetadata
{
}

Теперь, используя отражение, когда мы пытаемся узнать, применен ли SomeCustomAttribute к SomeEntity.SomeProperty, он возвращает, что атрибут не применен.

Если мы редактируем сгенерированный код и применяем атрибут напрямую, он работает.
Если мы проверяем, объединяются ли частичные классы для формирования единого типа, то да.
Если мы проверим, применяется ли атрибут MetadataType к типа (с использованием отражения), это так.
Кроме того, когда объект привязан к любому элементу пользовательского интерфейса WPF, проверки работают так, как должны, но с помощью отражения мы не можем найти атрибуты проверки и / или настраиваемые атрибуты, примененные к недвижимость.

Любая помощь или указатели спасут душу.


person Dipin Behl    schedule 20.06.2012    source источник
comment
проверьте это, я уже ответил на этот вопрос здесь stackoverflow.com/a/24757520/3050647   -  person elia07    schedule 15.07.2014


Ответы (1)


Но интерфейс / класс, помеченный атрибутом MetadataType, никогда не добавит эти атрибуты в ваш исходный класс, поэтому вы никогда не сможете найти их в классе с отражением. Это не цель атрибута MetadataType. Если вы хотите использовать отражение, вы должны сначала найти атрибут MetadataType, проверить тип, переданный этому атрибуту, и найти свой настраиваемый атрибут в этом типе. Вот как проверка использует MetadataType.

person Ladislav Mrnka    schedule 20.06.2012