Excepción de EF 4.1 "El proveedor no devolvió una cadena ProviderManifestToken"

88

Estoy intentando replicar un ejemplo encontrado en MSDN. Estoy usando ASP.NET y EF 4.1 (¿CTP?). He usado NuGet para instalar el paquete EntityFramework.

Recibo este error: The provider did not return a ProviderManifestToken string... y la base de datos nunca se crea.

Aquí está mi cadena de conexión:

<add name="HospitalContext"
   connectionString=
   "data source=.\SQLExpress;initial catalog=NewTestDB;integrated security=True;"
   providerName="System.Data.SqlClient"/>

Aquí está mi código:

var pat = new Patient { Name = "Shane123132524356436435234" };
db.Patients.Add(pat);

var labResult = new LabResult { Result = "bad", Patient = pat };

int recordAffected = db.SaveChanges();

Aquí está mi contexto:

public class HospitalContext : DbContext
{
    static HospitalContext()
    {
        Database.SetInitializer(new HostpitalContextInitializer());
    }

    public DbSet<Patient> Patients { get; set; }
    public DbSet<LabResult> LabResults { get; set; }
}

public class HostpitalContextInitializer :
             DropCreateDatabaseIfModelChanges<HospitalContext>
{
    protected override void Seed(HospitalContext context)
    {
        context.Patients.Add(new Patient { Name = "Fred Peters" });
        context.Patients.Add(new Patient { Name = "John Smith" });
        context.Patients.Add(new Patient { Name = "Karen Fredricks" });
    }
}

Este es un sistema SQL 2008 completamente parcheado, con VS 2010 SP1.

bugnuker
fuente
Parecería que después de agregar [Key] al modelo, está funcionando más allá de ese problema. Todavía tengo otro problema, pero esto podría haberlo resuelto.
bugnuker
Además, podría ser que agregué "Intergrated security = true" a mi cadena de conexión ...
bugnuker
Tengo la misma excepción cuando trabajo conSqlServerCe.Entity.dll
Nano Taboada
2
En aras de las cosas que pueden evocar esta excepción, paso 20 minutos mirando más allá del error tipográfico en el nombre de la cadena de conexión que debe coincidir con el nombre del contexto.
JustSteve

Respuestas:

184

Recibí este error y probé algunas de las sugerencias anteriores. Luego verifiqué la Excepción interna y noté que estaba obteniendo un error de inicio de sesión de SQL simple para el usuario. Solo algo más para comprobar.

junken
fuente
En mi caso, la contraseña del servidor SQL expiró
mklein
3
Gracias por señalarme en la dirección correcta. Mi servicio SQL Express no se inició, ¡duh!
camainc
Buena excepción interna ... tenía mal mi nombre de base de datos cuando señalé a EF a una nueva ubicación de copia de seguridad ... cosa curiosa, verifiqué el InnerEx y su comentario me hizo volver atrás y volver a leerlo ... ¡felicitaciones!
Andy Danger Gagne
Estaba usando Integrated Security, IIS AppPool no tenía los derechos necesarios.
Vincent Vancalbergh
+1 - (Mi IP de casa cambió) Mensaje de error: No se puede abrir el servidor 'SERVERNAME' solicitado por el inicio de sesión. El cliente con la dirección IP 'MY_OLD_IP' no puede acceder al servidor. Para habilitar el acceso, use SQL Azure Portal o ejecute sp_set_firewall_rule en la base de datos maestra para crear una regla de firewall para esta dirección IP o rango de direcciones. Este cambio puede tardar hasta cinco minutos en surtir efecto. \ R \ nFallo de inicio de sesión para el usuario 'MYADMINACCT'. \ R \ nA esta sesión se le ha asignado un ID de seguimiento de 'GUID'. Proporcione este ID de seguimiento al servicio de atención al cliente cuando necesite ayuda. "}
Dylan Hayes
8

Esto puede suceder a veces cuando coloca la cadena de conexión dentro de la aplicación.config del proyecto incorrecto en Visual Studio.

Por ejemplo, tuve este problema en el proyecto EF 4.1 (la versión publicada) + proyecto WCF Data Service y noté que no tenía una cadena de conexión especificada en el Proyecto de servicios de datos, donde se estaba utilizando.

Preet Sangha
fuente
Esta fue mi solución. Tuve que poner la cadena de conexión adecuada en el proyecto de inicio.
MickJuice
5

Estaba teniendo el mismo error, y en realidad fue un error de inicio de sesión para el servidor especificado. Eliminé el atributo "Seguridad integrada" de la cadena de conexión de configuración y funcionó.

Rakesh Singh
fuente
Esto funcionó para mí. Cualquier otra persona que tenga este problema debería intentarlo si las otras soluciones no funcionan.
Justin
Este error se produjo cuando el servicio SQL Express se desactivó en mi máquina.
John M
4

Tuve el mismo problema y agregué el siguiente código justo después de la instancia de mi contexto (carga por ejemplo)

context.Database.Connection.ConnectionString = @"Data Source=.\SQLExpress;Initial Catalog=Test;Integrated Security=True";
toto123
fuente
4

Tuve un problema similar con la aplicación MvcMusicStore. Cambié una línea en Web.config de "Instance = true" a "Instance = false". A veces funciona sin este ajuste, pero no sé qué causa la diferencia. Leer esto http://msdn.microsoft.com/en-us/library/ms254504.aspx realmente no ayudó.

xuvion
fuente
Increíble ... esta fue la solución adecuada para mí. No tengo ni idea de porqué.
Kees C. Bakker
2

Por alguna razón determinada de permiso, EF no puede crear una conexión de base de datos. Había enfrentado el mismo problema todo el día. Finalmente probé la siguiente solución y funcionó: a / Abrir IIS (estoy usando IIS 7) b / Abrir configuración avanzada de appool qué sitio web estaba usando (por ejemplo, DefaultAppPool) c / Ver grupo de modelo de proceso, cambiar el valor de identidad a "Localsystem"

Espero que funcione contigo.

Telvin Nguyen
fuente
2

Solo estaba teniendo el mismo problema ...
la solución que funcionó para mí fue:
ejecutar la herramienta de configuración de red del cliente (escriba cliconfg en Ejecutar)
y asegúrese de que TCP / IP esté habilitado ...

usuario1168945
fuente
2

Finalmente lo rompí, después de una ligera persecución salvaje pensando que se debía a los permisos.

Revelación: USE SQL PROFILER

(Nota: Recientemente bajé de EF6 a EF5)

Usando SQL Profiler encontré rápidamente el último SQL ejecutado antes de la falla informada:

SELECT TOP (1) 
[Project1].[C1] AS [C1], 
[Project1].[MigrationId] AS [MigrationId], 
[Project1].[Model] AS [Model]
FROM ( SELECT 
    [Extent1].[MigrationId] AS [MigrationId], 
    [Extent1].[Model] AS [Model], 
    1 AS [C1]
    FROM [dbo].[__MigrationHistory] AS [Extent1]
)  AS [Project1]
ORDER BY [Project1].[MigrationId] DESC

Bueno, mira eso, algo que ver con las migraciones. Está mirando en la __MigrationHistorytabla, que ni siquiera me había dado cuenta de que había creado (ya había borrado las migraciones en mi CSPROJ) y lo borré.

Así que levanto las filas de esa tabla y veo que está vinculada a una versión de producto específica (v6).

ingrese la descripción de la imagen aquí

De hecho, bajé de EF6 (que no tenía la intención de instalar en primer lugar) a EF5 (que es más compatible con los andamios) y fue entonces cuando comenzaron los problemas.

Supongo que la Model (<Binary data>)columna no es compatible con versiones anteriores, de ahí el The provider did not return a ProviderManifest instanceerror, ya que no pudo decodificarla.

No tenía nada que perder y simplemente borré esta mesa por completo y corrí Update-Database -Verbosey luego volví a estar en funcionamiento.

Si se encuentra en un entorno avanzado o ya está en producción, borrar esta tabla puede no ser la solución, pero de esta manera me permitió volver al trabajo.

Simon_Weaver
fuente
Terminé dejando caer la tabla __MigrationsHistory por completo y reorganizando con Add-Migrationy Update-Database -Verbose -Force. aquí hay una referencia de comando coding.abel.nu/2012/03/ef-migrations-command-reference
Simon_Weaver
el punto importante es que esto no es solo un error de permisos
Simon_Weaver
1

Al usar Visual Studio 11 Beta con EF4.1 y ASP.NET MVC, casi me arranco el pelo hasta que encontré

http://connect.microsoft.com/VisualStudio/feedback/details/740623/asp-net-mvc-4-default-connection-string-improperly-escaped

Para solucionar mi problema, entré en Application_Start y cambié

Database.DefaultConnectionFactory = new SqlConnectionFactory ("Fuente de datos = (localdb) \ v11.0; Seguridad integrada = Verdadero; MultipleActiveResultSets = Verdadero");

a

Database.DefaultConnectionFactory = new SqlConnectionFactory ( @ "Fuente de datos = (localdb) \ v11.0; Seguridad integrada = Verdadero; MultipleActiveResultSets = Verdadero");

GaTechThomas
fuente
Database.DefaultConnectionFactory = new SqlConnectionFactory(@"Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True");se agregó a mi Mainmétodo, ¡ahora funciona como un encanto! Muchas gracias.
rotgers
1

Este error solo está presente mientras el archivo .edmx está abierto y desaparece tan pronto como el archivo se cierra nuevamente.

Esta cita de CodePlex , funcionó conmigo (visual studio 2013 / MVC 5)

Feras
fuente
Trabajó conmigo también. Intenté cerrar y volver a abrir el archivo edmx. Trabajó.
Rohit
1

Otra cosa a considerar si está utilizando EF Code First es que a veces no crea automáticamente la base de datos de respaldo para su clase DbContext. La solución es agregar su propia cadena de conexión; puede usar la cadena de conexión que puede estar presente para manejar la base de datos de usuario / registro que respalda el Proveedor de membresía simple, como plantilla. Finalmente, deberá agregar un constructor predeterminado para la clase DbContext que creó:

public ChaletDb():base("ChaletConnection")
    {

    }

Aquí, el nombre de la cadena de conexión que ingresó en su archivo web.config se usa para dirigir el DbContext para crear la base de datos. Muy ocasionalmente, tuve que crear manualmente la base de datos (en SQL Server Management Studio) lo que hizo que funcionara.

John Kelleher
fuente
0

Tengo varios proyectos en una solución y agregué EF a cada proyecto en diferentes momentos. En algunas máquinas estaba funcionando y en algunas falló con el error mencionado anteriormente. Me tomó un tiempo darme cuenta de que algunos de los archivos app.config de mi proyecto tenían esto:

    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="v11.0" />
  </parameters>
</defaultConnectionFactory>

Esto está bien si usa LocalDb (nuevo como "sql express"), pero completamente incorrecto si no tiene ese servidor específico instalado y usa un SQL normal.

Solución: elimine el código anterior.

Oleg K
fuente
0

Esto se debe a que falló la conexión al servidor SQL.

Asegúrese de que la cuenta de usuario con la que está ejecutando el proceso tenga acceso a SQL Server.

Si ha generado el DbContext desde el hilo principal (como usar la inyección de dependencia) y luego si está personificando a otro usuario, se produciría este error. La solución sería generar el DbContext dentro del nuevo hilo o nuevo contexto de suplantación.

justcoding121
fuente
0

Acabo de cerrar todas las instancias de Visual Studio y reabrí mi solución.

No sé qué sucedió realmente, pero abrí la misma solución desde dos espacios de trabajo locales diferentes (uno con mis cambios locales, otro con el código fuente del repositorio sin cambios). Trabajo con una base de datos postgres, Entity Framework 6, Visual Studio 2013 y ASP.NET MVC 5.

Amigo Pascalou
fuente
0

Tuve un error para el marco de la entidad, pero ninguna de las respuestas anteriores terminó encajando en la solución que finalmente funcionó.

Mis modelos de EntityFramework Code First y DataContext estaban en un proyecto separado de mi proyecto principal de WebAPI. Mi proyecto Entity Framework en algún lugar de la línea de codificación se estableció como el proyecto de inicio y, por lo tanto, cuando estaba ejecutando una migración, recibía "El proveedor no devolvió una cadena ProviderManifestToken" ... problema de conexión.

Resulta que, dado que ConnectionString a la base de datos se encuentra en el archivo Web.config en el proyecto principal de WebAPI, cuando estaba ejecutando una migración, la cadena de conexión no se estaba recuperando. Al configurar el proyecto WebAPI como mi startProject, pude conectarme correctamente.

Ninja insomne
fuente