¿Puedo agregar atributos de anotación de datos MVC 2 a las propiedades existentes?

Estoy usando una clase generada como modelo y deseo agregar atributos de Anotación de Datos a algunas de sus propiedades. Como es un código generado, no quiero agregar las anotaciones directamente. ¿Hay otra manera de adjuntarlos a una propiedad?

Consideré hacer que el modelo fuera una interfaz, y usar una clase parcial para obtener la clase generada para suscribirse. ¿Hay una solución menos elaborada, suponiendo que incluso funcionaría?

Sí hay. Debe crear una clase de metadatos que tendrá las mismas propiedades que su modelo original y conectarla a su modelo con el atributo MetadataType:

[MetadataType(typeof(MyModelMetadata))] public partial class OriginalMyModel { } public class MyModelMetadata { [Required] public string MyProperty; // ... } 

En el ejemplo, ebove OriginalModel es su clase de modelo adecuada, y MyModelMetadata es una clase que se usa solo para anotar propiedades. MyModelMetadata debe tener las mismas propiedades que tiene su modelo.

Puedes usar el atributo MetadataType en tu clase:

http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute.aspx

En la práctica, he visto que los metadatos se desincronizan con un modelo generado con bastante frecuencia, lo que puede llevar a algunos dolores de cabeza. Es posible que desee ver un mecanismo de validación alternativo en lugar de anotaciones de datos.

He estado usando Fluent Validation , que es muy fácil de aprender y empezar a usar. Incluso hay una pieza de integración de Fluent Validation to xVal en Fluent Validation 2.0 (aún en versión beta) que puede incluir en su proyecto para la validación del lado del cliente.

La validación fluida le permite definir su validación en una clase separada. Todo lo que necesita hacer es agregar un atributo a su clase generada que le diga qué validador usar, lo que podría lograrse a través de clases parciales.

Alternativamente, puede crear modelos de vista específicos que se asignan desde su modelo de dominio que contengan sus anotaciones de datos. En ese caso, simplifique la asignación de ida y vuelta utilizando algo como AutoMapper . Luego, si su modelo de dominio cambia, obtendrá errores en tiempo de comstackción en comparación con el enfoque de metadatos.

    Intereting Posts