Dependancy Injected DbContext está vacío después de llenar DbContext creado con new (EF7, ASP.NET 5, vnext)

asp.net asp.net-core dbcontext entity-framework entity-framework-core

Pregunta

Soy relativamente nuevo en EF7 y he escuchado que la inyección de dependencia de DbContexts en el constructor del controlador es una buena manera de obtener el DbContext para su uso dentro de los métodos de acción dados. Sin embargo, hay muchas situaciones en las que la inyección de dependencia es imposible (por ejemplo, acceder a la Db en clases ordinarias), y se debe usar el patrón de using(VectorDbContext dbContext...) .

Me he encontrado con un problema en el que no se puede acceder a la adición de datos a un DbContext creado con el patrón de using mediante un contexto en el que se inyectó la dependencia. DbContext es una base de datos InMemory simple que se utiliza para realizar pruebas, no se conecta a nada.

Aquí está el código que agrega entidades al DbContext, para probar lo estoy llamando en Startup.cs:

using (ExampleDbContext dbContext= new ExampleDbContext()) {
    dbContext.Things.Add(
        new Thing() {
            Stuff= "something"
        });

    dbContext.SaveChanges();
}

Aquí está el código de acceso dentro del controlador:

using (ExampleDbContext dbContext= new ExampleDbContext()) {
    dbContext.Things.Add(
        new Thing() {
            Stuff= "something"
        });

    dbContext.SaveChanges();
}

Al avanzar, List1 tiene el elemento esperado, ¡pero List2 siempre está vacío!

¿Qué estoy haciendo mal? Parece que los DbContexts no están sincronizados de alguna manera, ¿cómo la Inyección de Dependencia crea el DbContext / de dónde viene?

EDITAR: Acabo de hacer algunas pruebas adicionales y confirmé que cualquier entidad agregada dentro del DbContext creado con new solo es visible en el new , y las entidades agregadas dentro del DbContext inyectado solo son visibles dentro del DbContext inyectado, lo que me lleva a creer que están conectando a diferentes bases de datos de respaldo, pero no puedo confirmar.

Respuesta aceptada

Podría estar equivocado, pero mi suposición es que cuando crea una nueva instancia de DbContext en el código, está usando el constructor sin parámetros que establece la cadena de conexión subyacente en algún valor predeterminado. Sin embargo, DbContext inyectado con DbContext podría resolverse utilizando otro constructor con una cadena de conexión diferente que se haya pasado explícitamente.

Ese es un ejemplo de la configuración de Unity que especifica explícitamente el parámetro del constructor:

<register type="DbContext, [assembly-name]" mapTo="DbContext, [assembly-name]">
<constructor>
    <param name="nameOrConnectionString" value="Test"/>
</constructor>
</register>

Así que me gustaría comprobar una configuración de su contenedor.




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é