EF Core 1.1 Migration – Le CSharpHelper actuel ne peut pas échafauder les littéraux de type

Cela semble être une erreur vraiment obscure, et je ne sais même pas par où commencer …

CSharpHelper actuel ne peut pas échafauder les littéraux de type ‘System.Func`3 [Microsoft.EntityFrameworkCore.Metadata.IProperty, Microsoft.EntityFrameworkCore.Metadata.IEntityType, Microsoft. Configurez vos services pour en utiliser un qui peut.

Cela se produit quand je cours

dotnet ef migrations add initial 

Mise à jour 1 – basée sur la question de Rob

L’architecture de l’application utilise un modèle de domaine riche. Il existe donc quelques “solutions de contournement” pour obtenir des éléments tels que des collections encapsulées et le modèle de énumération typé de Jimmy Bogard.

Chaque object de modèle de domaine a sa propre classe EntityTypeBuilder dans la couche d’access aux données, qui sont toutes appelées à partir de OnModelCreating dans DbContext . Celles-ci affichent également des informations sur la Console , ce qui me permet de constater que le générateur ne génère aucune erreur (aucune d’elles ne se trouve à ce stade).

DbContext expose uniquement DbSet pour les entités racine agrégées, ou pour le dire autrement, uniquement les entités ayant une classe de référentiel correspondante. Les autres objects du modèle de domaine sont des propriétés de navigation et ne nécessitent donc pas que DbSet soit exposé via DbContext .

Spécificités de la plateforme (à ma connaissance)

  • .NET Core 1.1 (Runtime + SDK)
  • EF Core 1.1
  • Microsoft.EntityFrameworkCore.Tools 1.0.0-preview2-final
  • Microsoft.EntityFrameworkCore.Design 1.0.0-preview2-final

Vous utilisez un environnement d’exécution .NET Core 1.1 mais les anciens packages d’outils (vous devez utiliser les derniers outils, à compter de cette date, il s’agit de preview4 , qui est toujours en alpha , contrairement à l’exécution – ouais, pas très intuitif au début )

En résumé, il s’agit d’un problème connu

  • Mettez à jour votre fichier project.json afin qu’il utilise preview4 comme indiqué dans Announcing Entity Framework Core 1.1
 "tools": { "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.1.0-preview4" } 
  • Vous pouvez ou non avoir besoin de corriger la version du SDK en utilisant un fichier global.json juste au-dessus du dossier src qui devrait contenir votre code, comme expliqué dans le blog de Hanselman.
 { "projects": [ "src", "test" ], "sdk": { "version": "1.0.0-preview2-1-003177" } } 

EDIT: Juste pour vous donner une réponse plus complète, voici à quoi ressemblent mon project.json et mon exemple de projet (le tout dans VS Code):

 { "version": "1.0.0-*", "buildOptions": { "debugType": "portable", "emitEntryPoint": true }, "dependencies": { "Microsoft.EntityFrameworkCore": "1.1.0-preview1-final", "Microsoft.EntityFrameworkCore.Design": "1.1.0-preview1-final", "Microsoft.EntityFrameworkCore.SqlServer": "1.1.0-preview1-final", "Microsoft.EntityFrameworkCore.SqlServer.Design": "1.1.0-preview1-final", }, "frameworks": { "netcoreapp1.1": { "dependencies": { "Microsoft.NETCore.App": { "type": "platform", "version": "1.1.0" } }, "imports": "dnxcore50" } }, "tools": { "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.1.0-preview4-final" } } 

Disposition du projet de code VS