web-dev-qa-db-fra.com

La migration d'addition Entity Framework Core 2.0

EF est nouveau pour moi et j'essaie de créer une solution de test simple avec VS 2017, .NET Core 2.0 et EF 2.0, mais je ne peux pas obtenir add-migration pour créer le dossier de migration et la migration initiale.

J'ai créé une solution appelée Driver avec deux projets de bibliothèque de classes .Net Core:

Driver.Data
Driver.Domain

Les packages suivants sont installés dans Driver.Data :

Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Tools

Driver.Data a un seul fichier cs appelé Driver.Context :

using Driver.Domain;
using Microsoft.EntityFrameworkCore;

namespace Driver.Data
{
    public class DriverContext : DbContext
    {
        public DbSet<Company> Companies { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(
                "Server=(localdb)\\mssqllocaldb; Database=Driver; Trusted_Connection=True;"
                );
        }
    }

}

Driver.Domain a un seul fichier cs appelé Company.cs :

namespace Driver.Domain
{
    public class Company
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string City { get; set; }
        public string State { get; set; }
    }
}

J'ai défini le projet de démarrage sur Driver.Data et dans la console PM, j'ai défini le projet par défaut sur Driver.Data

Voici le résultat de add-migration init -verbose :

Using project 'Driver.Data'.
Using startup project 'Driver.Data'.
Build started...
Build succeeded.
C:\Program Files\dotnet\dotnet.exe exec --depsfile "C:\Users\alex.florin\Documents\Visual Studio 2017\Projects\Driver\trunk\Driver.Data\bin\Debug\netcoreapp2.0\Driver.Data.deps.json" --additionalprobingpath C:\Users\alex.florin\.nuget\packages --additionalprobingpath "C:\Program Files (x86)\Microsoft SDKs\NuGetPackagesFallback" --additionalprobingpath "C:\Program Files\dotnet\sdk\NuGetFallbackFolder" --fx-version 2.0 "C:\Program Files\dotnet\sdk\NuGetFallbackFolder\Microsoft.entityframeworkcore.tools\2.0.1\tools\netcoreapp2.0\ef.dll" migrations add init --json --verbose --no-color --prefix-output --Assembly "C:\Users\alex.florin\Documents\Visual Studio 2017\Projects\Driver\trunk\Driver.Data\bin\Debug\netcoreapp2.0\Driver.Data.dll" --startup-Assembly "C:\Users\alex.florin\Documents\Visual Studio 2017\Projects\Driver\trunk\Driver.Data\bin\Debug\netcoreapp2.0\Driver.Data.dll" --project-dir "C:\Users\alex.florin\Documents\Visual Studio 2017\Projects\Driver\trunk\Driver.Data\\" --root-namespace Driver.Data

Il n'y a pas d'erreur mais rien n'est généré.

3
Alex

@JulieLerman a fourni la réponse lorsque j'ai posé la question lors de sa discussion sur le cours pluralsight. Il y a apparemment un problème avec cette tentative avec les bibliothèques de classes .NET Core. La solution de contournement réussie consiste à insérer les éléments suivants dans le fichier csproj du projet DBContext:

<PropertyGroup>
  <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConf‌igurationFiles> 
</PropertyGroup>

Elle a écrit un blog à ce sujet: http://thedatafarm.com/data-access/the-secret-to-running-ef-core-2-0-migration -or-net-standard-class-library /

De plus, veillez à définir le projet avec le DBContext dans le projet de démarrage

15
Alex

J'ai eu des problèmes lorsque j'essayais de le faire fonctionner autant que je le craignais. EF Core 2.0 n'est pas encore prêt pour les heures de grande écoute, car les principales commandes de base du réseau dotnet ne fonctionnent pas immédiatement. En plus de ce que vous avez fait, j'ai dû exécuter quelques tâches supplémentaires pour que cela fonctionne dans le fichier de projet lui-même. J'ai suivi ces deux discussions: https://github.com/aspnet/Scaffolding/issues/645 Et la réponse de Joe Healy ici: Aucun exécutable ne correspond à la commande "dotnet" ef "

En substance, cela ne ferait rien ou donnerait une erreur très simple. En fin de compte, la connexion de Microsoft.EntityFrameworkCore.Tools.DotNet ne fonctionnait pas correctement et devait être définie dans le 'ItemGroup' de mon projet .NET Core 2 comme suit:

 <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.1" />
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.1" />
  </ItemGroup>

Je pense également que vous devez utiliser un code légèrement différent pour que les migrations fonctionnent, en utilisant dotnet qui appelle des commandes pour 'dotnet core'. Suivi de 'ef'. Alors je viens de faire ceci sur ma solution de test:

dotnet ef migrations add test

et cela a fonctionné. Vous devez, obligatoirement, être au même niveau de dossier que votre projet lorsque vous exécutez les commandes de migration ou de mise à jour de la base de données. Si vous rencontrez toujours des problèmes, n'hésitez pas à jeter un coup d'œil sur un projet que j'ai créé sur GitHub:

https://github.com/djangojazz/EFCoreTest/tree/master/EFCoreCodeFirstScaffolding

0
djangojazz