No reforzar las referencias de clave externa en Esfuerzo

c# effort

Pregunta

Estoy usando Effort en Visual Studio y C # para recrear y probar en una base de datos. Estoy escribiendo una clase para una sola tabla y, por lo tanto, solo estoy llenando la base de datos con objetos de esa tabla. Mi problema es que la base de datos de Esfuerzo quiere que las claves externas del objeto hagan referencia a objetos reales en la base de datos.

Mi error es

System.Data.Entity.Infrastructure.DbUpdateException: Se produjo un error al actualizar las entradas. Vea la excepción interna para más detalles.

System.Data.Entity.Core.UpdateException: Se produjo un error al actualizar las entradas. Vea la excepción interna para más detalles.

System.Reflection.TargetInvocationException: el destino de una invocación ha generado una excepción.

NMemory.Exceptions.ForeignKeyViolationException: Violación de clave externa [Table1 :: SettingsId]. El valor clave [0] no existe en la tabla a la que se hace referencia [Table2 :: SettingsId]. Código de error: RelationError

Como esta tabla en particular tiene muchas claves externas para los objetos que tienen muchas otras claves externas, requeriría mucho trabajo. ¿Hay alguna forma en Esfuerzo de desactivar esto para que pueda probar esta tabla solo?

Respuesta aceptada

Me encontré con este problema también y quería probar la tabla en el ámbito de la base de datos más grande. Puede hacer un método de ayuda que simplemente ejemplifique todo lo que necesita y, como resultado, pase la base de datos o la tabla con referencias. Eso ayuda porque puede llamarlo desde cualquier método / clase de prueba que necesite y siempre que lo necesite.


Respuesta popular

Podría crear un nuevo archivo .edmx desde su base de datos para uso de prueba solamente. Por ejemplo:

En Visual Studio, seleccione Archivo-> Nuevo-> Datos-> Modelo de datos de entidad. Seleccione "EF Designer de la base de datos". Elija o cree una conexión a su base de datos de SQL Server existente y guarde la configuración de conexión en app.config como "testConnectionString".

En el diseñador del modelo de datos, elimine cualquier relación de clave externa que no necesite. Guarda el diseñador y reconstruye el proyecto.

En Esfuerzo, pase el nombre de la cadena de conexión (que se generó cuando creó el nuevo .edmx) al método CreateTransient , como esto:

EntityConnection connection = Effort.EntityConnectionFactory.CreateTransient("name=testConnectionString");

MyDbContext context = new MyDbContext(connection);

Esto debería permitirle insertar valores en la tabla sin necesidad de rellenar las tablas de clave externa relacionadas.

Sin embargo, esto incluye una advertencia: si el código que está probando utiliza alguna propiedad de navegación que dependa de las claves externas, se producirá un error. Esto me hace preguntarme qué tan valioso es realmente este tipo de "prueba de unidad".




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é