Je suis le cours Pluralsight de Julie Lerman - EntityFramework Core 2: Getting Started
. Dans ce cours, elle a 3 projets. Les deux premières Data
et Domain
sont basées sur la bibliothèque .NET Standard. Le troisième projet Web
est une application Web .NET Core.
J'ai suivi cette structure. Dans Data
, j'ai ajouté une classe POCO appelée Client.
Dans Domain
, j'ai ajouté une classe appelée TestDbContext comme ceci:
public class TestDbContext : DbContext
{
public DbSet<Client> Clients { get; set; }
public TestDbContext(DbContextOptions<TestDbContext> options) : base(options)
{
}
}
Suivant son exemple, dans le fichier Startup.cs de mon projet Web
, j'ai procédé comme suit pour injecter le fournisseur et la chaîne de connexion dans DbContext.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddDbContext<TestDbContext>(options =>
{
options.UseSqlServer(Configuration.GetConnectionString("TestConnection"));
});
}
Enfin, je tente d’ajouter une migration à ce contexte. J'ai le projet Web
défini comme projet de démarrage. Dans la console du gestionnaire de packages, je saisis add-migration initial
.
J'obtiens alors l'erreur suivante: The current CSharpHelper cannot scaffold literals of type 'Microsoft.EntityFrameworkCore.Metadata.Internal.DirectConstructorBinding'. Configure your services to use one that can.
Dans la vidéo de Julie, tout cela a fonctionné pour elle et le package de migration a été créé. Cependant, pour moi - juste l'erreur. Des indices sur ce qui peut se passer?
Vérifiez la version des packages de votre projet dans le fichier '.csproj'. Auparavant, j'ai le même problème pour la version mitch match de AspNet Core et EntityFramework Core (je suppose). Faire les mêmes travaux pour moi bien. Solution trouvée Ici
Pour moi maintenant.
<PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.0-rc1-final" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.0-rc1-final" PrivateAssets="All" />
Ajoutez 3 paquets avec la même version à partir du gestionnaire de paquets nuget
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.1.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.1.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.1.2" />
Cela a fait le tour pour moi!
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.0" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.1" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.1.0- preview1-final" />
</ItemGroup>
</Project>