web-dev-qa-db-fra.com

Comment synchroniser un modèle après avoir utilisé Code First de Database en utilisant Entity Framework 6.1 et MVC 5?

Hypothèses

  • Utilisation de EF 6.1, MVC 5, VS 2013, C #

  • J'ai un modèle de base de données existant conçu dans Toad DM pour SQL Server) et il est très important de le garder toujours à jour

Étapes et notes

  1. Utilisation du modèle de données d'entité ADO.NET J'ai choisi Code d'abord de la base de données (nouvelle fonctionnalité de EF 6.1) pour générer les modèles. Remarque: Les classes de modèle et la classe DbContext ont été générées avec succès mais le fichier NO .edmx ou .tt a été généré.

  2. Ensuite, j'ai ajouté un nouvel élément d'échafaudage: les contrôleurs MVC 5 avec des vues, à l'aide d'Entity Framework. Remarque: Succès, contrôleurs et vues générés

Question

A partir de maintenant, je ne veux plus utiliser Code First pour mettre à jour ma base de données. Au lieu de cela, je souhaite que les modèles soient mis à jour en fonction des modifications apportées à la base de données. Que faire ensuite? Si je n'ai pas de fichier edmx, ne puis-je pas mettre à jour mes classes de modèle à partir de la base de données?

56
gkaio

Code First de la base de données de l'assistant de modèle de données d'entité crée très bien vos classes d'entité, comme si elles avaient été créées dans le style Code d'abord. Ce que vous demandez, c'est s'il existe un moyen de garder ces classes à jour au fur et à mesure de l'évolution de votre base de données, comme dans le style EDMX "Update Model From Database". D'après ce que j'ai étudié, il est impossible d'utiliser l'outil intégré. Cependant, voici une solution de contournement que j'ai trouvée utile:

Disons que j'ai une base de données avec une table produit et une table client. À l'origine, j'avais créé une classe StoreDBContext et sélectionné le produit parmi l'un de mes objets. Maintenant, je veux ajouter la table des clients en tant que nouvelle entité au contexte existant. Voici comment procéder à l'aide de l'assistant Code en premier:

  1. Créez un nouveau modèle de données d'entité, appelez-le StoreDBContextTemp ou autre chose Add new item
  2. Choisissez le code d’abord dans l’assistant de base de données code first from database
  3. Sélectionnez client en tant qu’objet à ajouter (client uniquement) et complétez l’assistant add table
  4. Ouvrez le fichier de contexte nouvellement créé, StoreDBContextTemp.cs, et copiez les propriétés virtuelles de vos entités nouvellement ajoutées:

public virtual DbSet<Customer> Customers {get; set;}

  1. Collez ces nouvelles propriétés dans votre Original StoreDBContext.cs classe dbcontext.
  2. Supprimez StoreDBContextTemp.cs et supprimez la chaîne de connexion pour StoreDBContextTemp dans app.config/web.confg, etc.
  3. Vous pouvez maintenant utiliser Client sur la classe StoreDBContext

Si vous ajoutez ou supprimez des tables, vous devrez ajuster manuellement les champs, mais vous n'aurez au moins pas besoin d'écrire à la main des dizaines de propriétés chaque fois qu'une nouvelle table est ajoutée au modèle.

50

Une autre option consiste à supprimer les classes générées automatiquement du projet et à les générer à nouveau. En suivant cette approche, nous devons nous assurer que le modèle de données (nom de classe qui hérite de DbContext) est identique à celui du modèle précédent. Le nom du modèle précédent est mis en surbrillance dans

Data Model Name

8
Rajesh Pawde

Trois choses.

  1. Il n'y a pas de .edmx lorsque vous utilisez Code First.

  2. Si vous utilisez Code First Migrations, vous devez d'abord écrire le code, puis migrer les modifications vers la base de données. Cela vous aide à avoir un code beaucoup plus organisé sans code généré, ce qui est un avantage.

  3. Il y a un plugin dans Visual Studio pour faire le contraire. Entity Framework PowerTools vous permet de sélectionner la base de données et de la mapper à des objets.

https://visualstudiogallery.msdn.Microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d

Il y a encore une chose à ajouter à la réponse de Brian Vander Plaats. À l'étape 4, vous voudrez également copier tout ce qui se trouve dans la nouvelle méthode StoreDBContextTemp.cs/OnModelCreating et l'ajouter à StoreDBContext.cs/OnModelCreating existant. Sinon, vous perdriez ces ajouts de configuration lorsque vous supprimez la nouvelle classe de contexte.

3
Gary Burgess