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
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.
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.
enlaces parecen estar desactualizados? –
enlaces corregidos, editados - es aplicable en MVC. gracias Jeff – Shimmy
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 ...
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
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
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
This artículo describe cómo integrar Validación bloque de aplicación con Entity Framework. Puede ser de alguna ayuda.
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.
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.
Considere implementar IValidatableObject en sus entidades.
- 1. Validación y uso de Entity Framework
- 2. MVC3 Validación con Entity Framework Modelo/Base de datos First
- 3. Entity Framework IValidatableObject reference DbContext
- 4. proyecciones de Entity Framework
- 5. Entity Framework TypeUsage Object
- 6. Mocking Entity Framework Context
- 7. Entity Framework Query Optimization
- 8. Entity Framework SET IDENTITY_INSERT
- 9. Entity Framework OfType()
- 10. SqlBulkCopy y Entity Framework
- 11. Entity Framework 4 - Herencia
- 12. Entity Framework ObjectContext reutilización
- 13. Entity framework y VARBINARY
- 14. Vistas y Entity Framework
- 15. Entity Framework: Ignorar columnas
- 16. SQLite con Entity Framework
- 17. Entity Framework Performance Issue
- 18. Autonumérico con Entity Framework
- 19. C# Entity Framework Pagination
- 20. Entity Framework 4 Repository?
- 21. Microsoft Entity Framework
- 22. Entity Framework Thread Safety
- 23. Entity Framework + POCO
- 24. Entity Framework y multihilo
- 25. Pensamientos sobre Entity Framework
- 26. Optimización Entity Framework
- 27. Entity Framework Guid
- 28. Entity Framework 4.1 - EFTracingProvider
- 29. Entity Framework Merge Nightmare
- 30. Entity Framework (EF) OutOfMemoryException
¿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. –
Puede ser correcto. Ha pasado mucho tiempo desde que eché un vistazo a EF. – smaclell
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