2012-06-20 13 views
5

En nuestra aplicación, estamos utilizando el generador de entidades EF4.0 y POCO para generar entidades desde la base de datos. Para aplicar la anotación de datos, estamos creando Interfaces e implementando esas interfaces en las clases parciales que hemos creado para que coincida con la clase parcial generada mediante el uso de EF.Obtener atributos personalizados aplicados a las entidades generadas mediante el atributo 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 
{ 
} 

Ahora, utilizando la reflexión, cuando tratamos de conseguir si se aplica 'SomeCustomAttribute' en 'SomeEntity.SomeProperty', devuelve que no se aplica el atributo.

Si editamos el código generado y aplicamos el atributo directamente, funciona.
Si comprobamos que las clases parciales se fusionen para formar un solo tipo, lo hace.
Si buscamos que el atributo MetadataType se aplique en el tipo (usando reflexión), lo es.
Además, cuando la entidad está vinculada a cualquier elemento UI de WPF, las validaciones funcionan como deberían pero, al utilizar la reflexión, no podemos encontrar los Atributos de validación y/o los Atributos personalizados aplicados en la propiedad.

Cualquier ayuda o información salvaría un alma.

+0

mira esto, ya he respondido esta pregunta aquí http://stackoverflow.com/a/24757520/3050647 – elia07

Respuesta

8

Pero la interfaz/clase marcada con el atributo MetadataType nunca agregará esos atributos a su clase original para que nunca pueda encontrarlos en la clase con reflexión. Ese no es un propósito del atributo MetadataType. Si desea usar la reflexión primero debe encontrar el atributo MetadataType, verificar el tipo pasado a ese atributo y buscar su atributo personalizado en ese tipo. Así es como la validación usa MetadataType.

+0

bueno, yo no sabía eso. Pensé que adjuntaría los atributos aplicados en los metadatos con propiedades en la entidad. Gracias por entender. Me ayudó a darle forma a la solución. –

Cuestiones relacionadas