Entity Framework Core - Campo requerido del proveedor de memoria interna

effort entity-framework-core

Pregunta

En versiones anteriores de Entity Framework, he estado usando Effort ( https://effort.codeplex.com/ ) para las pruebas unitarias. Decidí proporcionar el nuevo proveedor de memoria para EF Core y rápidamente descubrí que no respeta el IsRequired () y otras configuraciones de entidades establecidas en OnModelCreating. ¿Hay alguna manera de hacerlo cumplir esta configuración? Si no, ¿está esto en una lista de tareas pendientes para ser implementado? Tal vez incluso una alternativa en el proveedor de memoria?

Me gustaría poder usar los pasos de prueba para intercambiar el contexto y usar una base de datos real en algunos escenarios de prueba de integración que podrían aprovechar el mismo código. Esto parece "bueno de tener", y tal vez sea un caso de esfuerzo con EF Core. Tampoco pude encontrar nada sobre el esfuerzo en el que se está trabajando para EF Core.

No pude encontrar nada en la página de Uservoice para EF ( https://data.uservoice.com/forums/72025-entity-framework-feature-suggestions ) e iré allí si no está disponible.

Respuesta popular

Esta pregunta se hizo hace bastante tiempo, pero tenía la misma pregunta y tropecé con esta pregunta sin respuesta. Terminé encontrando una respuesta que funciona para mí, así que pensé en compartirla en caso de que alguien más se encontrara con esto como lo hice yo.

Parece que SQLite tiene una opción en memoria que actúa más como una base de datos real que la opción estándar UseInMemory (): https://docs.microsoft.com/en-us/ef/core/miscellaneous/testing/sqlite

La única diferencia fue que agregué Microsoft.EntityFrameworkCore.Sqlite , no Microsoft.Data.Sqlite como dicen los documentos.

No es del todo relevante para la pregunta, pero en mi caso particular, quiero usar un in memory mientras estoy probando la funcionalidad básica de un webapi en el que estoy trabajando, pero todavía quiero poder probar restricciones únicas, etc. Aquí Es lo que agregué para implementar la base de datos en memoria.

Dentro de Configurar Servicios:

services.AddDbContext<MyDbContext>(options =>
{
    var liteConn = new SqliteConnection("DataSource=:memory:");
    liteConn.Open();

    options
        .UseSqlite(liteConn)
        .ConfigureWarnings(warnings =>
        {
            warnings.Throw(RelationalEventId.QueryClientEvaluationWarning);
            warnings.Log(RelationalEventId.ExecutedCommand);
        });
});

Dentro de Configure:

services.AddDbContext<MyDbContext>(options =>
{
    var liteConn = new SqliteConnection("DataSource=:memory:");
    liteConn.Open();

    options
        .UseSqlite(liteConn)
        .ConfigureWarnings(warnings =>
        {
            warnings.Throw(RelationalEventId.QueryClientEvaluationWarning);
            warnings.Log(RelationalEventId.ExecutedCommand);
        });
});



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué