Excepción de esfuerzo (EF6) al acceder a DbSet (la clave proporcionada no estaba presente en el diccionario)


Pregunta

Esto está demostrando ser un poco difícil de rastrear, pero cuando uso el Esfuerzo para probar Entity Framework 6, parece que obtengo un error KeyNotFoundException ("La clave dada no estaba presente en el diccionario") al intentar acceder a uno de los DBSet repositorios.

Noté que funciona con uno o dos DbSets en DbContext, pero una vez que empiezo a agregar múltiples DbSets a DbContext, recibo el error anterior.

Código de ejemplo (esto es una simplificación de todo mi código, el error parece ser aleatorio cuando comento algunos DbSets de DbContext y luego los vuelvo a poner. También tengo clases parciales en los modelos, pero a veces también tengo éxito, por lo que parece extraño):

Prueba

            [Fact]
            public void MyTest()
            {
                var connection = Effort.DbConnectionFactory.CreateTransient();
                var context = new StubDbContext(connection);

                var count = context.Models1.Count();
                Assert.Equal(count, 0);

            }

Modelos DBContext y DbSets

            [Fact]
            public void MyTest()
            {
                var connection = Effort.DbConnectionFactory.CreateTransient();
                var context = new StubDbContext(connection);

                var count = context.Models1.Count();
                Assert.Equal(count, 0);

            }

Traza de la pila:

            [Fact]
            public void MyTest()
            {
                var connection = Effort.DbConnectionFactory.CreateTransient();
                var context = new StubDbContext(connection);

                var count = context.Models1.Count();
                Assert.Equal(count, 0);

            }

Respuesta popular

Estoy teniendo el problema exacto. Resultó que era porque estaba usando el tipo de datos de geografía de SQL en algunas de mis tablas de base de datos de SQL 2014, y el esfuerzo no es compatible con este tipo de datos , y tampoco hay planes para agregarle soporte en este momento, lo que me deja en un dilema real, ya que no puedo encontrar ningún otro proveedor de base de datos en memoria para EF6, ¡lo cual sí!

Es posible que existan otros campos de tipo de referencia más recientes que tampoco admita, no estoy seguro.





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