Cómo hacer Unit Test sobre EF DbContext

En anteriores entradas he presentado mecanismos para hacer Unit Test sobre métodos de lógica genéricos, que suelen ubicarse en una capa de dominio, y Flow Expectation Test sobre la capa de servicio. Ahora voy a presentarte la manera de hacer Unit Test sobre tu capa de datos.

En esta entrada presento una arquitectura que usa un patrón de diseño con Unit Of Work y Reposity Pattern. En esta otra entrada escribí sobre Rhino Mock como una de mis librerías favoritas para Unit Testing. Ahora voy a combinar ambas para hacer unit test a tus métodos de Unit Of Work, pudiendo simular una colección de datos en memoria como si de un acceso a base de datos se tratase, de forma que puedas probar tus métodos con consultas linq y testear así su resultado, siendo capaz de aproximarte cada vez al valioso TDD del que hablo en esta entrada.

Leer más…

Cómo crear dinámicamente un contexto de Entity Framework Core en tiempo de ejecución

A medida que me introduzco más en arquitecturas de microservicios, trato de explotar sus diferentes ventajas. Una de ellas es poder usar una tecnología diferente para cada microservicio, por lo que es la oportunidad perfecta para explorar dotNet Core.

Ya he creado una entrada previa centrada en Core, para validar un token generado desde un servicio creado con .Net Framework. Ahora presento esta otra entrada donde he vuelto a aprovechar la arquitectura de Unit of Work, Repository Pattern y Entity Framework Code First de la que hablo en una de mis primeras publicaciones, en esta ocasión se trata de usarla con Entity Framework Core y además reforzarla con la creación de contextos de datos de forma dinámica en tiempo de ejecución y manteniéndola desacoplada de las demás capas, de forma que Entity Framework sea algo particular de la capa de datos.

Leer más…

Unit of Work, Repository y Entity Framework Code First

En esta entrada voy a hablar un poco sobre una arquitectura para la capa de datos que a mi me esta funcionando muy bien. Se trata de aplicar el patrón Unit Of Work junto al Repository Pattern y Entity Framework Code First para crear una capa de acceso a datos totalmente desacoplada de la capa de negocio, de forma que nuestro modelo de aplicación y las capas superiores no se vean afectadas por un cambio en la tecnología utilizada para acceso a datos.

Leer más…

Cómo manejar concurrencia con RowVersion

En una aplicación con cierto número de usuarios, puede ser habitual que se lleguen a producir errores de concurrencia. Si no quieres tener una perdida de información a causa de estos problemas, perjudicando la experiencia de tus usuarios, es necesarios que adoptes estrategias o mecanismos para controlar estos accesos concurrentes a la información. En esta entrada te voy a presentar una posibilidad con un buen nivel de automatismo, de forma que implementarla y controlar los errores sea rápido y fácil, dotándote de mayor eficiencia.

La estrategia que te presento el uso de la propiedad RowVersion a través de la Fluent Api de Entity Framework para un control de concurrencia denominado “pesimista”.

Leer más…