Estoy tratando de generar clases a partir de una base de datos (primer enfoque de la base de datos de EntityFramework).
Para mayor comodidad, estoy más o menos siguiendo este tutorial: https://docs.efproject.net/en/latest/platforms/full-dotnet/existing-db.html
Estoy en un punto en el que estoy ejecutando el equivalente de esta línea de código en la consola de Visual Studio Package Manager:
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -Verbose
Esta línea de código está generando el error (con el modo -Verbose activado):
Using startup project 'EFSandbox'.
Using project 'EntityFrameworkCore'
Build started...
Build failed.
No veo otras opciones que produzcan resultados significativos y no veo documentación sobre este error en particular. Si sirve de algo, este proyecto no tiene un archivo project.json, actualmente. Todo está en el archivo .csproj, que no he editado manualmente.
c#
entity-framework-core
LightToTheEnd
fuente
fuente
Respuestas:
Dos consejos más importantes:
[1] - Asegúrese de que su proyecto se compile por completo antes de ejecutar un nuevo comando de andamio.
De otra manera...
[2] - Verifique el control de fuente o haga una copia:
Puede tener algunos problemas muy molestos del tipo "huevo y la gallina" si no tiene suerte o comete un error.
Otros problemas:
Si tiene varias DLL, asegúrese de no generar en el proyecto incorrecto . Un mensaje de 'Error de compilación' puede ocurrir por muchas razones, pero la más tonta sería si no tiene EFCore instalado en el proyecto en el que está realizando el andamio.
En la consola del administrador de paquetes hay un
Default project
menú desplegable y probablemente ahí es donde terminaron sus nuevos archivos si le falta un cambio esperado.Una mejor solución que recordar establecer un menú desplegable es agregar el
-Project
interruptor a su comando de andamio.Este es el comando completo que uso:
Para EF Core 2
Para EF Core 3
Nota: -force sobrescribirá los archivos, pero no eliminará los que ya no existen. Si elimina tablas de su base de datos, debe eliminar los archivos de entidad antiguos usted mismo (simplemente ordene en Explorer por fecha y elimine los antiguos).
Referencia completa de andamios:
EF Core 2:
https://docs.efproject.net/en/latest/mis Miscellaneous / cli / powershell.html#scaffold - dbcontext (esto
EF Core 3:
https://docs.microsoft.com/en-us/ef/core/misiverse/cli/dotnet
fuente
Sé que esto es viejo, pero pasé un tiempo tratando de resolverlo hoy, así que espero que esto ayude a alguien.
Tengo un proyecto .Net Core pero quiero convertir mis archivos en una biblioteca de clases .Net Standard.
DbContext-Scaffold
en la consola del administrador de paquetes no funcionó para mí, perodotnet ef dbcontext scaffold
en un símbolo del sistema normal lo hizo.Tuve que instalar estos paquetes en mi biblioteca de clases:
Tenía que tener un proyecto .Net Core configurado como proyecto de inicio en mi solución y ese proyecto tenía que tener una referencia a mi biblioteca de clases . Creo que esa última parte es lo que me estaba perdiendo y que me mantuvo rascándome la cabeza durante tanto tiempo.
Finalmente, ingresé en la biblioteca de clases desde un símbolo del sistema y ejecuté esto:
dotnet ef dbcontext scaffold "<connection string>" Microsoft.EntityFrameworkCore.SqlServer -o <output folder> -s <relative path to my startup project>
fuente
La construcción manual del proyecto presionando Ctrl + Shift + B me ayudó a ver los errores que estaban causando que fallara la construcción.
fuente
Asegúrese de que su proyecto no se esté ejecutando, por alguna razón, este comando no funciona mientras mi API se está ejecutando en segundo plano.
fuente
Seguí teniendo este problema incluso cuando me aseguré de que mi proyecto (que tenía EF Core instalado) se construyera correctamente. Todavía falló con el "Error de compilación". mensaje, que es visible cuando se usa la
-Verbsose
bandera.Tuve que hacer esto en mi caso:
-Project
el comando de la consola del administrador de paquetes para que apunte a mi proyecto recién creado (y aprovisionado con EF Core). El último paso fue solo por si acaso, ya que solo había un proyecto en mi solución desechable.Parece que todo este proceso requiere un proyecto principal de ASP.NET (o simplemente un proyecto de .NET Core que no es una biblioteca de clases) en algún lugar de la solución, presumiblemente configurado también como proyecto de inicio de la solución.
fuente
Usando VS2017 Preview 3, .NET Core 2 (PREVIEW) tuve todo tipo de problemas, pero finalmente tomé el enfoque sugerido anteriormente y creé una nueva solución.
<TargetFramework>netcoreapp2.0</TargetFramework>
Luego, agregó Entity Framework:
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.Dotnet" Version="2.0.0-preview2-final" />
Entonces;
fuente
Cree una solución completa y vea dónde falla. Tenía algunos proyectos NuGet ocultos en una carpeta que no se compiló. Solo mientras reconstruía la solución descubrí cuál era el problema. Todo debe construirse o, de lo contrario, Scaffold fallará.
fuente
Para mí, el problema era que estaba tratando de configurarlo en un nuevo proyecto de consola en blanco dentro de la solución, que no tenía archivos, por lo que el andamio intentó usar este proyecto como un proyecto de inicio y no pudo encontrarlo
Main
. Lo arreglé agregando un nuevo archivo con un archivo principal vacíofuente
Gracias a lo anterior, la reconstrucción de la solución del proyecto resolvió esto. Algunas advertencias cruciales para mí personalmente fueron:
dotnet build
no era suficiente (había asumido que lo era)!dotnet build
comando mientras estaba dentro de un proyecto secundario (myProject.data)¡Espero que ayude a alguien más que estaba igualmente confundido!
fuente
Si usa varios proyectos en la solución, verifique el proyecto predeterminado en el administrador de paquetes.
fuente
Lo resolví haciendo clic derecho en proyectos y "Descargar proyecto" dejé solo el proyecto EF y ejecutar los comandos
fuente
Si el marco de entidad regresa
build failed
, lo más probable es que tenga algún tipo de error en cualquiera de sus proyectos.Incluso si el proyecto en el que está ejecutando el comando está limpio y sin errores, otros proyectos en esa solución pueden causar la
build failed
respuesta.Solución
Default project
menú desplegable dentroPackage Manager Console
fuente
Para mí, mi proyecto se construyó en Visual Studio, pero tuve que especificar una versión para "Microsoft.AspNetCore.App" al ejecutar Scaffold-DbContext.
Entonces en lugar de:
<PropertyGroup> <TargetFramework>netcoreapp2.1</TargetFramework> <RuntimeFrameworkVersion>2.1.6</RuntimeFrameworkVersion> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.App"/> </ItemGroup>
Yo tenía que tener:
<PropertyGroup> <TargetFramework>netcoreapp2.1</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.6" /> </ItemGroup>
fuente
Asegúrate de que tu construcción funcione bien.
Ejecute el comando scaffold desde la consola del paquete, su comando debería funcionar:
Scaffold-DbContext 'Data Source=TEST-XY010;Initial Catalog=TESTDB;Trusted_Connection=True' Microsoft.EntityFrameworkCore.SqlServer -Context HOPWAContext -OutputDir TESTModel -Force
fuente
Lo resolví deteniendo mi servidor y luego ejecutándolo nuevamente.
fuente
Esto dejó de funcionar para mí hoy. Así que intenté ejecutar el comando dotnet scaffold desde la línea de comandos y funcionó la primera vez. ¡¡No me preguntes !!
fuente
Asegúrese de tener todos los paquetes y presione ctrl + shift + b para construir la solución. Me funciona.
fuente
Eso funcionó para mí.
fuente