.net - mvc - No se puede adjuntar el archivo*.mdf como base de datos
entity framework database first español (18)
Básicamente, seguí un tutorial y decidí eliminar el archivo .mdf
posteriormente.
Ahora, cada vez que intento ejecutar la aplicación, aparece el siguiente error (el título de este hilo). El código donde aparece el error se muestra a continuación (ASP.NET MVC 4):
OdeToFoodDB db = new OdeToFoodDB();
public ActionResult Index()
{
var model = db.Restaurants.ToList();
return View(model);
}
Mi cadena de conexión es la siguiente:
<add name="DefaultConnection"
connectionString="Data Source=(LocalDb)/v11.0;Initial Catalog=OdeToFoodDb;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|/OdeToFoodDb.mdf"
providerName="System.Data.SqlClient" />
Intenté buscar en el Explorador de objetos del servidor SQL, pero parece lo siguiente:
Además, en Server Explorer no veo ninguna conexión de datos.
Y cuando trato de agregar una nueva conexión en Server Explorer, no veo ninguna base de datos llamada OdeToFoodDb
.
Perdón por esta amplia pregunta, pero soy nuevo en Entity Framework y no entiendo muy bien qué está mal aquí.
Desde la consola del Administrador de paquetes, ejecuta:
sqllocaldb.exe stop v11.0
sqllocaldb.exe delete v11.0
Ejecute su proyecto
- Registra un usuario
"No se puede adjuntar el archivo ''C: / Github / TestService / TestService / App_data / TestService.mdf" como base de datos'' TestService ''
Cuando cumpla con el mensaje de error anterior, siga los siguientes pasos.
- Abrir el Explorador de objetos de SQL Server
- Haga clic en el botón actualizar.
- Expand (localdb) / MSSQLLocalDB (SQL Server 12.x.xxxxx - xxxxx / xxxx)
- Expand Database
- Por favor, elimine la base de datos de mismo nombre existente
- Haga clic en el botón derecho y luego elimine
- Regrese a su consola de gestión de paquetes
- Actualizar base de datos
Creo que para SQL Server Local Db no debería usar la propiedad Initial Catalog
. Sugiero usar:
<add name="DefaultConnection"
connectionString="Data Source=(LocalDb)/v11.0;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|/OdeToFoodDb.mdf"
providerName="System.Data.SqlClient" />
Creo que el archivo db local no es compatible con varias bases de datos en el mismo archivo mdf, así que especifique que un catálogo inicial no es compatible (o no está bien soportado y tengo algunos errores extraños).
Descubrí que al comentar la sección de contexto utilizada para inicializar la base de datos se resolvió el problema. Havnt tuvo tiempo de averiguar qué pasaba con las declaraciones iniciales, pero eliminar la siembra resolvió el problema.
Eche un vistazo a esto: Entity Framework no crea una base de datos
Intentaría darle a la base de datos un nombre diferente. A veces puede tener problemas con SQL Express cuando intenta crear una base de datos con el mismo nombre por segunda vez. Hay una forma de solucionar esto usando SQL Server Management Studio, pero generalmente es más fácil usar un nombre de base de datos diferente.
Editar Esta respuesta fue aceptada porque confirma el error y la solución alternativa utilizada por OP (cambiar el nombre de la base de datos podría ayudar ). Estoy totalmente de acuerdo en que renombrar la base de datos no es realmente una forma aceptable, y no resuelve el problema por completo . Desafortunadamente, no revisé las otras formas de resolverlo realmente en SSMS.
Elimine esta línea de la cadena de conexión que debería hacerlo;) "AttachDbFilename = | DataDirectory | whateverurdatabasenameis-xxxxxxxxxx.mdf"
Extrañamente, para el mismo problema, lo que me ayudó fue cambiar el ''a'' v11.0 ''en la siguiente sección de la configuración.
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
He enfrentado el mismo problema. Los siguientes pasos en VS 2013 me resolvieron el problema:
- En Server Explorer, agregue nuevo Connect to Database
- Seleccione el archivo de base de datos de Microsoft SQL Server como fuente de datos
- Elija el nombre de archivo de la base de datos como debería estar de acuerdo con la cadena de conexión en su web.config
- Se creó un nuevo archivo de base de datos y aparecieron dos conexiones de base de datos en Server Explorer: "MyDatabaseName" y "MyDatabaseName (MyProjectName)"
- Eliminar una conexión (eliminé "MyDatabaseName")
Nos encontramos con esto nosotros mismos al ejecutar la dotnet ef database update
utilizando ASP.Net Core 2.1; parece que las rutas relativas no son compatibles con AttachDbFileName
.
System.Data.SqlClient.SqlException (0x80131904): Cannot attach the file ''./OurDbName.mdf'' as database ''OurDbName''.
Solo quería expresar eso aquí para otras personas que podrían toparse con esto. La "solución" es usar rutas absolutas.
Ver también: https://github.com/aspnet/EntityFrameworkCore/pull/6446
Recientemente me encontré con el mismo problema. Aquí hay una cosa para verificar. en Visual Studio hay tres lugares donde debemos verificar y eliminar la base de datos.
1. Solution Explorer''s App_Data folder
2. Server Explorer''s Data Connection menu
3. SQL Server Object Explorer
Cuando borro la base de datos de los dos primeros puntos, el error aún ocurre. Por lo tanto, también necesitaba eliminar la base de datos del Explorador de objetos de SQL Server. Entonces podría ejecutar fácilmente el comando ''update-database'' sin error. Espero que esto ayude.
Recrea tu base de datos. No lo elimine y su aplicación debería seguir funcionando.
Se encontró con este problema. Causé en mi caso borrando el .mdf mientras iispexress todavía estaba ejecutándose y por lo tanto aún usando el DB. Haga clic derecho en iisexpress en la bandeja del sistema y haga clic en salir. A continuación, elimine el MDF para evitar que este error ocurra realmente.
Para solucionar este error simplemente dentro de VS, haga clic derecho en la carpeta de la aplicación de datos y agregue un nuevo elemento> Base de datos de SQL Server. Nombre: [use el nombre de la base de datos proporcionado por el error de la base de datos de actualización] Haga clic en Agregar.
Según @ davide-icardi, elimine el "Catálogo inicial = xxx;" desde web.config, pero también verifica que tu archivo de perfil de publicación azul lo elimine también de aquí:
[Ruta de YourAspNetProject] / Properties / PublishProfiles [YourAspNetProjectName] .pubxml
<PublishDatabaseSettings>
<Objects xmlns="">
<ObjectGroup Name="YourAspNetProjectName" Order="1" Enabled="True">
<Destination Path="Data Source=AzureDataBaseServer;Initial Catalog=azureDatabase_db;User ID=AzureUser_db_sa@AzureDataBaseServer;Password=test" />
<Object Type="DbCodeFirst">
<Source Path="DBMigration" DbContext="YourAspNetProjectName.Models.ApplicationDbContext, YourAspNetProjectName" MigrationConfiguration="YourAspNetProjectName.Migrations.Configuration, YourAspNetProjectName" Origin="Configuration" />
</Object>
</ObjectGroup>
</Objects>
</PublishDatabaseSettings>
Si aplica migraciones ya, esto puede solucionarlo.
Vaya a su Web.config y actualice su cadena de conexión según sus archivos de migración.
Data Source=(LocalDb)/MSSQLLocalDB;AttachDbFilename=|DataDirectory|/aspnet-GigHub-201802102244201.mdf;Initial Catalog=aspnet-GigHub-201802102244201;
Las fechas deben coincidir con los primeros números en sus Migraciones.
Tuve el mismo error al seguir el tutorial sobre "Primeros pasos con ASP.NET MVC 5 | Microsoft Docs". Estaba en Visual Studio 2015. Abrí View-> SQL Server Object Explorer y eliminé la base de datos nombrada después del tutorial, luego podría funcionar. vea Eliminar archivo .mdf de app_data causas excepción no puede adjuntar el archivo como base de datos
Ya tiene una copia anterior de esa base de datos instalada en Server Explorer. Así que es una colisión de nombres simple en Server Object Explorer / SQL Server. Es probable que haya creado el mismo nombre de catálogo de la base de datos antes de decidir moverlo a la carpeta Apps_Data. Entonces ese nombre de base de datos ya existe y solo necesita ser eliminado.
Simplemente vaya a Visual Studio> Ver> Explorador de objetos de SQL Server y elimine el nombre de la base de datos anterior y su conexión. Vuelva a intentar su aplicación y debería instalar el archivo .mdf en App_Data y crear de nuevo la misma base de datos exacta en Server Explorer.
Yo tenía el mismo error. Lo extraño fue que tuve un nuevo proyecto de cero, funcionó a la perfección y otro proyecto mucho más grande, donde siempre me encontré con ese mensaje de error.
El proyecto que funciona perfectamente (casi) siempre crea la base de datos (incluyendo los archivos) automáticamente. Puede ser cualquier comando, leer, escribir, actualizar. Los archivos se crean. Por supuesto que usa
DropCreateDatabaseIfModelChanges
Solo hay un caso, cuando se produce un problema: SI el mdf se crea automáticamente y elimina el mdf y el archivo de registro. Entonces eso fue todo. Diga adiós a su autocreación ...
La única forma que encontré para arreglarlo fue como lo mencioné:
sqllocaldb stop v11.0 & sqllocaldb delete v11.0
Después de eso, todo vuelve a la normalidad (y todas las demás bases de datos manejadas por LocalDB también se han ido).
EDITAR: Eso no fue cierto. Lo intenté y la v11.0 se recrea automáticamente y todos los mdfs permanecen disponibles. No he intentado con LocalDBs "sin archivo".
Lo confuso es que también recibí este error si algo más estaba mal. Así que mi sugerencia es, si quiere asegurarse de que su DB-Setup sea sólida y sólida: cree una nueva solución / proyecto desde cero, use los comandos DB más básicos (Agregue una entidad, muestre todas las entidades, elimine todas las entidades) y vea si funciona.
Si es SÍ, el problema está en algún lugar en el abismo de la configuración y versiones de VS2013 y nuget y demás.
SI NO, tiene un problema con su instalación de LocalDB.
Para cualquiera que realmente quiera entender lo que está sucediendo en EF (y todavía no estoy seguro si lo hago :-)) http://odetocode.com/Blogs/scott/archive/2012/08/14/a-troubleshooting-guide-for-entity-framework-connections-amp-migrations.aspx
PD: Empujame si necesitas el proyecto de ejemplo en ejecución.
Para arreglar esto usando SQL SERVER Management Studio
Tu problema: obtienes un error como ''No se puede adjuntar el archivo'' YourDB.mdf ''como base de datos'' YourConnStringNamedContext '';
Motivo: sucede porque eliminó los archivos de respaldo .mdf, ldf sin eliminar realmente la base de datos dentro de la instancia en ejecución de SqlLocalDb; volver a ejecutar el código en VS no será de ayuda porque no puede volver a crear un DB con el mismo nombre (y es por eso que el cambio de nombre funciona, pero deja el viejo nombre de db fantasma por ahí).
La solución : estoy usando VS2012, adopte de manera similar para una versión diferente.
Navega a la ruta inferior e ingresa
c: / archivos de programa / servidor sql de Microsoft / 110 / Tools / Binn> información de sqllocaldb
Arriba cmd muestra los nombres de instancia, incluyendo ''v11.0''
Si la instancia ya se está ejecutando, ingrese en el indicador
sqllocaldb info v11.0
Tenga en cuenta la siguiente información Propietario: YourPCName / Username, State: Running, Instance pipe name: np: /. / Pipe / LOCALDB # 12345678 / tsql / query, donde 123456789 es algo alfanumérico aleatorio
Si el Estado no se está ejecutando o detenido, inicie la instancia con
sqllocaldb start v11.0
y extraer la misma información que arriba.
En el cuadro de diálogo ''Conectar'' de SS Management Studio, ingrese
nombre del servidor: np: /. / pipe / LOCALDB # 12345678 / tsql / query
auth: autenticación de Windows
nombre de usuario: (igual que el Propietario, aparece atenuado para Win. auth)
Una vez conectado, encuentre el DB fantasma que borró (p. Ej., YourDB.mdf debería haber creado un archivo db llamado YourDB), y realmente elimínelo.
¡Hecho! Una vez que se haya ido, VS EF no debería tener problemas para volver a crearlo.