Problema para conectarse a la base de datos: problema de la instancia del usuario y el marco de la entidad

StackOverflow https://stackoverflow.com/questions/7381591

Pregunta

He creado un archivo de modelo de entidad (.Edmx) basado en un archivo .mdf en mi aplicación ASP.NET, colocada en mi App_Data Carpeta.

En primer lugar, mi cadena de conexión, creada por el Asistente de Entity Framework:

<connectionStrings>
    <add name="Sales_DBEntities" 
        connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string='data source=.\SQLEXPRESS;attachdbfilename=&quot;c:\users\ext\documents\visual studio 2010\Projects\WebProject_A\WebProject_A\App_Data\Sales_DB.mdf&quot;;integrated security=True;USER INSTANCE=TRUE;multipleactiveresultsets=True;App=EntityFramework'" 
        providerName="System.Data.EntityClient" />
</connectionStrings>

Lo anterior se coloca en un app.config Archivo creado por el asistente.

He copiado la misma cadena de conexión al web.config Archivo también (no estoy seguro de si esto es necesario).

Me he encontrado con dos problemas al intentar ejecutar más tarde la misma aplicación en una máquina my (he creado la aplicación en una máquina diferente).

El primero fue con respecto a la instancia del usuario:

No se pudo generar una instancia de usuario de SQL Server debido a una falla al iniciar el proceso para la instancia del usuario. La conexión será cerrada

Lo primero que realmente no comprendo es lo que realmente define una instancia de usuario.

Según MSDN:

Una instancia de usuario es una instancia separada del motor de base de datos SQL Server Express que genera una instancia principal

¿Mi base de datos local se considera una instancia de usuario?

Realmente me gustaría una aclaración sobre el asunto porque me encontré con publicaciones que sugirieron marcarlo como falso, y la razón no fue clara para mí.

Otra publicación sobre este asunto

A partir de ahí, encontré otra solución que explica que para este problema debe habilitar la instancia de usuario en el servidor SQL en su máquina.

La solución

He hecho lo que se explicó en esa publicación

Pero ahora me he encontrado con un nuevo problema:

Un intento de adjuntar una base de datos con nombre automático para el archivo (ruta completa a mi archivo app_data my.mdf) que existe una base de datos con el mismo nombre, o no se puede abrir el archivo especificado, o se encuentra en UNC Share.

Ya he intentado eliminar todos los archivos en

 C:\Documents and Settings\(your user account name)\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS

Y reiniciando como sugerido en otras publicaciones, pero aún no puedo encontrar una solución clara para este problema.

Sé que esta es una publicación larga, pero cualquier ayuda sería apreciada

gracias de antemano.

¿Fue útil?

Solución

Lee esto Muy buena descripción de lo que realmente son las instancias de usuario.

En una palabra:

  • SQL Server le permite tener múltiples instancias de sí mismo en una sola computadora: se puede acceder a la instancia predeterminada utilizando solo el nombre de la máquina (o dirección IP) de la máquina host; todas las demás instancias deben especificarse mediante un nombre de instancia (como el SQLExpress en tu máquina)

  • Para fines de desarrollo, también puede crear un instancia de usuario - Cada usuario obtiene su propia instancia separada de SQL Server (funciona en el Edicion Expres solo) y una base de datos está adjunta por su nombre de archivo (path\Sales_DB.mdf) a esa instancia de usuario. Esta instancia se inicia a pedido, luego se ejecuta y se apaga cuando ya no es necesario

Si bien esto funciona muy bien para el desarrollo, en realidad no está destinado a más adelante, ciertamente no para el uso de producción.

En un entorno de producción, desea Adjunte sus archivos de base de datos A la instancia real de SQL Server en la que deben ejecutarse, generalmente utilizando SQL Server Management Studio. Cuando hace esto, ya no se refiere a esa base de datos a través de su Nombre del archivo, pero en su lugar usas el nombre de la base de datos Eso se dio a la base de datos cuando se adjuntó al servidor. En este caso, SQL Server manejará todos los detalles de las operaciones, y esa instancia de SQL Server está en funcionamiento todo el tiempo (no es necesario que se inicie "a pedido" todo el tiempo), y puede usar cosas como permisos y Iniciar sesión para controlar el acceso a la base de datos.

Su cadena de conexión se vería algo así:

<connectionStrings>
    <add name="Sales_DBEntities" 
         connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string='server=YourServerNameHere;database=Sales_DB;integrated security=True;App=EntityFramework'" 
        providerName="System.Data.EntityClient" />
</connectionStrings>

Cuando ha adjuntado una base de datos a una instancia de producción (o prueba) de SQL Server, no necesita saber cuáles son los archivos que componen la base de datos, y no necesita especificar esos archivos: SQL Server se encargará de que. Simplemente se refiere a la base de datos a través de su nombre de la base de datos.

Otros consejos

La solución siempre es más simple que se anticipa:

  1. Haga doble clic en el model.edmx Archivo -> El diseñador se abrirá.
  2. Haga clic derecho en el diseñador -> Update model from database .
  3. nueva conexión -> Choose Database file (.mdf) bajo tipo.
  4. Explorar -> Ve a tu App_Data carpeta y elige el DB.
  5. Copiar la cadena de conexión creada en App.config a web.config.

adiós.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top