web-dev-qa-db-fra.com

Entity Framework 7 échafaudage DbContext

J'essaie de générer une variable DbContext pour une structure de base de données existante à l'aide de ASP.NET 5 et Entity Framework 7. Il n'est donc pas étonnant que peu de documentation explique comment procéder facilement. De plus, je veux échafauder SEULEMENT le contexte; il y a ~ 900 tables et je ne me soucie que de quelques-unes d'entre elles. Je n'ai pas besoin d'une classe de modèle pour chacune d'elles.

J'ai utilisé les commandes spécifiées ici et ici avec un peu de chance.

Donc, je suppose que j'ai deux questions:

  1. Où se trouvent les fichiers de contexte générés? J'exécute la commande dans l'invite de commande sans échec, mais rien d'autre ne se produit. Je sais que je suis au moins au bon endroit car je peux ajouter l'ancien modèle EF6 avec des propriétés non prises en charge et cela me donne une erreur, à savoir qu'ils ne sont pas pris en charge.

  2. Est-il possible de générer uniquement un contexte sans classes de modèle correspondantes?

12
awh112

J'ai eu le même problème avec mon projet générant le contexte et les modèles. Voici quelques choses que j'ai faites. 

Mises à jour pour 1.0 RC1 ci-dessous

Project.json

  "dependencies": {
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
    "EntityFramework.Commands": "7.0.0-rc1-final",
    "EntityFramework.MicrosoftSqlServer.Design": "7.0.0-rc1-final"
  },

  "commands": {
    "ef": "EntityFramework.Commands"
  },

  "frameworks": {
    "dnx451": { },
    "dnxcore50": { }
  }

Commande DNX

dnx ef dbcontext scaffold "connectionString" EntityFramework.MicrosoftSqlServer

Original Post ci-dessous

Assurez-vous qu'ils sont ajoutés à votre fichier project.json:

"dependencies": {
    "EntityFramework.SqlServer": "7.0.0-beta7",
    "EntityFramework.Commands": "7.0.0-beta7",
    "EntityFramework.SqlServer.Design": "7.0.0-beta7"
},
"commands": {
    "ef": "EntityFramework.Commands"
}

Mettez à niveau dnvm et les environnements d'exécution dnx en utilisant dnvm update-self et mise à niveau de dnvm. J'ai couru cela dans cmd.

Cmd.exe ouvert dans l'emplacement du projet (si vous êtes dans Windows, naviguez jusqu'au dossier et faites un clic droit dans le dossier, puis cliquez sur "Ouvrir la fenêtre de commande ici"). Dans mon cas, j’avais un projet distinct pour ma couche d’accès aux données. 

C:\Projects\Stackoverflow Example\src\StackoverflowExample.DAL\

J'ai alors simplay couru:

dnx ef dbcontext scaffold "Source de données =; Initial Catalogue = base de données; Sécurité intégrée = True" EntityFramework.SqlServer

Assurez-vous que votre projet peut générer. S'il y a des erreurs, les commandes ne fonctionneront probablement pas. 

Il a généré tous les modèles ainsi que le contexte (avec la configuration OnModelCreating () de chaque entité). Si vous n'avez pas besoin de tous les modèles, supprimez simplement ceux que vous n'utilisez pas.

Donc pour répondre à vos questions:

  1. Il crée les modèles et le contexte dans le dossier dans lequel vous avez exécuté l'échafaudage dnx ef dbcontext.
  2. Je ne vois aucune commande permettant de le faire pour le moment . Lancez dnx ef --help dans cmd et cherchez vous-même . dnx ef

J'espère que ça aide.

12
Nick De Beer

Une option --table (-t) existe pour la commande d'échafaudage:

dnx ef dbcontext scaffold connectionstring provider -t dbo.tab1 -t dbo.tab2
3
Kirsten

Pour EF 7, vous n'avez plus besoin d'initialiser avec base, cela entraîne généralement une erreur du compilateur. Ce que vous devez regarder comme le Microsoft EF7 docs de départ.

Vous voulez faire attention à la nouvelle 

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        // Visual Studio 2015 | Use the LocalDb 12 instance created by Visual Studio
        optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.ConsoleApp;Trusted_Connection=True;");

        // Visual Studio 2013 | Use the LocalDb 11 instance created by Visual Studio
        // optionsBuilder.UseSqlServer(@"Server=(localdb)\v11.0;Database=EFGetStarted.ConsoleApp;Trusted_Connection=True;");

        // Visual Studio 2012 | Use the SQL Express instance created by Visual Studio
        // optionsBuilder.UseSqlServer(@"Server=.\SQLEXPRESS;Database=EFGetStarted.ConsoleApp;Trusted_Connection=True;");
    }
0
Phillip Morton