2012-06-20 6 views
5

W naszej aplikacji używamy generatora jednostek EF4.0 i POCO do generowania jednostek z bazy danych. Aby zastosować adnotację danych, tworzymy interfejsy i implementujemy te interfejsy w klasach częściowych, które stworzyliśmy, aby pasowały do ​​klasy cząstkowej generowanej przy użyciu EF.Uzyskaj niestandardowe atrybuty zastosowane do wygenerowanych obiektów za pomocą atrybutu MetadataType

/*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 
{ 
} 

Teraz, przy użyciu odbicia, gdy staramy się uzyskać, jeśli „SomeCustomAttribute” nakłada się na „SomeEntity.SomeProperty”, zwraca, że ​​atrybut nie jest stosowana.

Jeśli edytujemy wygenerowany kod i stosujemy atrybut bezpośrednio, to działa.
Jeśli sprawdzimy, czy częściowe klasy łączą się w jeden typ, to tak.
Jeśli sprawdzimy atrybut MetadataType, który zostanie zastosowany dla typu (za pomocą odbicia), to jest.
Ponadto, gdy jednostka jest związana z dowolnym elementem interfejsu użytkownika WPF, sprawdzania poprawności działają tak, jak powinny, ale za pomocą refleksji nie możemy znaleźć atrybutów sprawdzania poprawności i/lub atrybutów niestandardowych zastosowanych do właściwości.

Każda pomoc lub wskazówki uratują duszę.

+0

sprawdzenie tego to, ja już odpowiedział na to pytanie tutaj http://stackoverflow.com/a/24757520/3050647 – elia07

Odpowiedz

8

Jednak interfejs/klasa opatrzony atrybutem MetadataType nigdy nie doda tych atrybutów do oryginalnej klasy, więc nigdy nie można ich znaleźć w klasie z refleksją. Nie jest to celem atrybutu MetadataType. Jeśli chcesz użyć refleksji, musisz najpierw znaleźć atrybut MetadataType, sprawdzić typ przekazany do tego atrybutu i wyszukać niestandardowy atrybut w tym typie. W ten sposób sprawdzanie poprawności używa MetadataType.

+0

dobrze nie wiedział. Sądziłem, że dołączą atrybuty zastosowane w metadanych do właściwości w encji. Dziekuję za zrozumienie. Pomogło mi to w opracowaniu rozwiązania. –

Powiązane problemy