Estoy experimentando problemas al usar el marco de Esfuerzo (versión 1.1.4) para probar en unidades mi DB-layer.
Tengo una capa de base de datos utilizando Entity framework 6.1.3 y el modelo se crea utilizando el enfoque de base de datos primero, por lo que hay un archivo *.edmx
que describe el modelo.
He creado una clase parcial para exponer un constructor adicional utilizado por las pruebas unitarias con un esfuerzo como este:
public partial class Entities
{
public Entities(DbConnection connection)
: base(connection, true)
{
}
}
La prueba unitaria simple se ve así:
private Entities CreateContext()
{
//var connectionString = ConfigurationManager.ConnectionStrings["Entities"].ConnectionString;
//var connection = Effort.EntityConnectionFactory.CreateTransient(connectionString);
//return new Entities(connection as DbConnection);
var connection = Effort.EntityConnectionFactory.CreatePersistent("name=Entities");
var context = new Entities(connection);
return context;
}
[TestMethod]
public void Testing_Effort_Integration()
{
using (var context = CreateContext())
{
var entity = context.TableEntity.FirstOrDefault(i=> i.Id);
Assert.IsNotNull(entity);
}
}
Cuando ejecuto la prueba de la unidad, se lanza una excepción para la línea:
var connection = Effort.EntityConnectionFactory.CreatePersistent("name=Entities");
{"El proveedor no devolvió una instancia de ProviderManifest."} Mensaje de InnerException: {"No se pudo determinar la versión de almacenamiento; se requiere una conexión de almacenamiento válida o una sugerencia de versión."}
Otras publicaciones que he encontrado sugieren cambiar el atributo ProviderManifestToken
en el archivo *.edmx
de "2012" a "2008". Esto parece resolver el problema pero, en cambio, me da otra excepción cuando intento usar el contexto por primera vez aquí:
var entity = context.TableEntity.FirstOrDefault(i=> i.Id);
NotSupportedException No se puede determinar el nombre del proveedor para la fábrica del proveedor del tipo 'System.Data.EntityClient.EntityProviderFactory'. Asegúrese de que el proveedor ADO.NET esté instalado o registrado en la configuración de la aplicación.
¿Alguien sabe cómo resolver este problema para poder usar el enfoque de Esfuerzo con la entidad 6.1.3 DB-first?
He podido utilizar Effort (versión 1.1.4) con éxito para realizar pruebas unitarias de las capas DB creadas en EF 4 y EF 5 con DB-first. Por eso creo que la versión EF puede ser de interés ...
¡Un colega mío encontró la solución a mi problema!
Aparentemente estaba usando el paquete nuget "Effort" en lugar del paquete nuget "Effort.EF6". Después de desinstalar e instalar el otro también tuve que actualizar mi App.Config con las etiquetas:
<system.data>
<DbProviderFactories>
<add name="Effort.Provider" invariant="Effort.Provider" description="Effort.Provider" type="Effort.Provider.EffortProviderFactory,Effort" />
</DbProviderFactories>
</system.data>
<entityFramework>
<providers>
<provider invariantName="Effort.Provider" type="Effort.Provider.EffortProviderServices, Effort" />
</providers>
</entityFramework>
Y también incluí una llamada en SetUp para mis pruebas de unidad para registrar el proveedor de esfuerzo:
[SetUp]
public void Setup()
{
EffortProviderConfiguration.RegisterProvider();
}
Esto solucionó el problema para mi. ¡Ojalá pueda ayudar a otros!