2008-10-10 39 views
16

Me estoy preparando para comenzar un nuevo proyecto y he estado investigando el marco de la entidad. Mi pregunta es ¿cuál es la mejor estrategia para validar las entidades? Otros proyectos en los que he trabajado han usado atributos para la mayoría de la validación, pero obviamente esto no es posible en el marco de la entidad. ¿Es la única forma de hacer esto al manejar los métodos parciales en los establecedores de propiedades? Todos los consejos son muy apreciados.Validación de Entity Framework

Respuesta

11

No he usado realmente el marco Entity antes, pero una búsqueda rápida indica que tiene varias opciones.

1) Validar en otra capa en su aplicación

siempre una opción, yo sólo pensé que iba a tirar por ahí de forma explícita.

2) Enganche de los hechos onChanged de la Entidad a continuación, realizar la validación

probable frágil y se convertiría después confuso/lento si usted tiene muchas propiedades diferentes cosas que pueden cambiar para cada entidad.

3) implementar métodos parciales para validar la propiedad cambia

Según this poste y this walkthrough hay métodos parciales disponibles para su validación. Esta parece ser la mejor opción, ya que no es muy intrusiva y puede implementar selectivamente la validación que desee.

Espero que ayude. Buena suerte.

+0

¿En qué se diferencian los números 2 y 3? Los métodos parciales que genera son los eventos OnChanged ... a menos que me falta algo. –

+0

Puede ser correcto. Ha pasado mucho tiempo desde que eché un vistazo a EF. – smaclell

+3

Leí # 2 y # 3 como validación de nivel de entidad y propiedad, respectivamente. Estas dos estrategias tienen diferentes propósitos, por supuesto: la validación a nivel de entidad prueba la validez de todas las propiedades juntas (por ejemplo, que las propiedades mutuamente excluyentes no están ambas configuradas), mientras que la validación de nivel de propiedad considera solo el contenido de una sola propiedad a tiempo (por ejemplo, que una dirección de correo electrónico es de la forma correcta). – ladenedge

3

Si usa ASP.NET MVC, entonces podría usar Validation Application Block o System.ComponentModel.DataAnnotations. Los artículos Using Data Annotations y Using Application Block muestran cómo hacerlos usando Linq, pero el uso con entity-framework debe ser similar.

+0

enlaces parecen estar desactualizados? –

+0

enlaces corregidos, editados - es aplicable en MVC. gracias Jeff – Shimmy

6

En .NET 4, habrá compatibilidad con la validación inmediata en Entity-Framework.

Salida: http://blogs.msdn.com/adonet/archive/2010/01/13/introducing-the-portable-extensible-metadata.aspx

Así que no funcionan en el disco en la implementación de la lógica de validación demasiado complejo ...

+0

Curiosamente, la extensión PEM y sus muestras son, por alguna razón, ya no están disponibles a través de MSDN. Me encantaría un enlace actualizado si alguien tiene uno. – ladenedge

+0

Espero que no nos estén engañando ... Supongo que me equivoqué al decir "out-the-box", ahora me doy cuenta de que es solo un complemento. Dice que el complemento se puede descargar de http://visualstudiogallery.msdn.microsoft.com/en-us/e6467914-d48d-4075-8885-ce5a0dcb744d , pero echa un vistazo al enlace para ver si está roto. – Shimmy

+0

Encontré este enlace en los comentarios http://code.msdn.microsoft.com/DesignerExtStartKit/Wiki/View.aspx?title=Home&version=3, pero aún no tuve tiempo de finalizar la compra. – Shimmy

2

This artículo describe cómo integrar Validación bloque de aplicación con Entity Framework. Puede ser de alguna ayuda.

0

Si está utilizando WPF o Windows Forms, entonces puede implementar la interfaz IDataErrorInfo.

La aplicación de ejemplo BookLibrary del proyecto WPF Application Framework (WAF) muestra cómo las entidades creadas por el marco de la entidad pueden ser validados.

1

Hemos overrident el contexto del objeto e interceptar las SaveChanges() método

public abstract class ValidationObjectContext : ObjectContext{ 
    ... 

    public override int SaveChanges(SaveOptions options){ 
     ValidateEntities(); 
     return base.SaveChanges(options); 
    } 

} 

De esa manera la validación se deja hasta el último minuto antes de realizar las conexiones, pero después de que haya (esperando) a ser feliz con el gráfico y listo para comprometerse, (a diferencia de otras opciones de validación en cualquier cambio, ya que algunas reglas complejas como las que tenemos solo son válidas después de establecer varias propiedades).Tenemos dos niveles de validación, validación de propiedad básica, cosas como longitud de cadena, nulabilidad, etc. Y validación de lógica de negocios, lo que puede requerir la verificación de reglas en varios objetos, posiblemente presionando la base de datos para confirmar.

0

Considere implementar IValidatableObject en sus entidades.