Nella nostra applicazione, stiamo utilizzando il generatore di entità EF4.0 e POCO per generare entità dal database. Per applicare l'annotazione dei dati, stiamo creando interfacce e implementando tali interfacce sulle classi parziali che abbiamo creato per abbinare la classe parziale generata usando EF.Ottieni attributi personalizzati applicati alle entità generate tramite l'attributo 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
{
}
Ora, utilizzando la riflessione, quando cerchiamo di ottenere se 'SomeCustomAttribute' è applicato su 'SomeEntity.SomeProperty', restituisce che l'attributo non viene applicato.
Se si modifica il codice generato e si applica direttamente l'attributo, funziona.
Se si verifica la fusione delle classi parziali per formare un singolo tipo, lo fa.
Se si verifica la presenza dell'attributo MetadataType sul tipo (mediante reflection), lo è.
Inoltre, quando l'entità è associata a qualsiasi elemento dell'interfaccia utente di WPF, le convalide funzionano come dovrebbero ma utilizzando la reflection non siamo in grado di trovare gli attributi di convalida e/o gli attributi personalizzati applicati alla proprietà.
Qualsiasi aiuto o suggerimento salverebbe un'anima.
controllare questo, ho già risposto a questa domanda qui http://stackoverflow.com/a/24757520/3050647 – elia07