Maison base de données tutoriel mysql EF Code First Migrations数据库迁移

EF Code First Migrations数据库迁移

Jun 07, 2016 pm 02:59 PM
c code first 数据库 迁移

1、EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework。 在程序包管理器控制台中执行以下语句,安装EntityFramework。 PM Install-Package EntityFramework 安装成功后,界面提示如下图: 在新建的Portal控制台

1、EF Code First创建数据库

  新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework。

  在程序包管理器控制台中执行以下语句,安装EntityFramework。

PM> Install-Package EntityFramework
Copier après la connexion

  安装成功后,界面提示如下图:

EF Code First Migrations数据库迁移

   在新建的Portal控制台应用程序中添加两个实体类,代码结构如下:

EF Code First Migrations数据库迁移

  其中,类文件PortalContext.cs的代码如下:

<span>using</span><span> System;
</span><span>using</span><span> System.Collections.Generic;
</span><span>using</span><span> System.Linq;
</span><span>using</span><span> System.Text;

</span><span>using</span><span> System.Data.Entity;
</span><span>using</span><span> System.Data.Entity.Infrastructure;

</span><span>using</span><span> Portal.Entities;
</span><span>using</span><span> Portal.Mapping;

</span><span>namespace</span><span> Portal
{
    </span><span>public</span> <span>class</span><span> PortalContext : DbContext
    {
        </span><span>static</span><span> PortalContext()
        {
            Database.SetInitializer(</span><span>new</span> DropCreateDatabaseIfModelChanges<portalcontext><span>());
        }

        </span><span>public</span> DbSet<province> Provinces { <span>get</span>; <span>set</span><span>; }
        </span><span>public</span> DbSet<category> Categories { <span>get</span>; <span>set</span><span>; }

        </span><span>protected</span> <span>override</span> <span>void</span><span> OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(</span><span>new</span><span> ProvinceMap());
            modelBuilder.Configurations.Add(</span><span>new</span><span> CategoryMap());
        }
    }
}</span></category></province></portalcontext>
Copier après la connexion

  在静态构造函数中,设置了当数据库模型发生改变时,则删除当前数据库,重建新的数据库。

  代码执行后,生成的数据库:

 EF Code First Migrations数据库迁移

2、EF Code First数据库迁移

2.1、生成数据库

  修改类文件PortalContext.cs的静态构造函数,取消当数据库模型发生改变时删除当前数据库重建新数据库的设置。

<span>static</span><span> PortalContext()
{
    Database.SetInitializer</span><portalcontext>(<span>null</span><span>);
}</span></portalcontext>
Copier après la connexion

   1>、在程序包管理器控制台,执行语句:

PM> Enable-Migrations -EnableAutomaticMigrations
Copier après la connexion

 EF Code First Migrations数据库迁移

  执行成功后,Portal控制台应用程序代码结构中,添加Migrations文件夹,并生成类文件Configuration.cs。

EF Code First Migrations数据库迁移

<span>namespace</span><span> Portal.Migrations
{
    </span><span>using</span><span> System;
    </span><span>using</span><span> System.Data.Entity;
    </span><span>using</span><span> System.Data.Entity.Migrations;
    </span><span>using</span><span> System.Linq;

    </span><span>internal</span> <span>sealed</span> <span>class</span> Configuration : DbMigrationsConfiguration<portal.portalcontext><span>
    {
        </span><span>public</span><span> Configuration()
        {
            AutomaticMigrationsEnabled </span>= <span>true</span><span>;
        }

        </span><span>protected</span> <span>override</span> <span>void</span><span> Seed(Portal.PortalContext context)
        {
            </span><span>//</span><span>  This method will be called after migrating to the latest version.

            </span><span>//</span><span>  You can use the DbSet<t>.AddOrUpdate() helper extension method 
            </t></span><span>//</span><span>  to avoid creating duplicate seed data. E.g.
            </span><span>//</span>
            <span>//</span><span>    context.People.AddOrUpdate(
            </span><span>//</span><span>      p => p.FullName,
            </span><span>//</span><span>      new Person { FullName = "Andrew Peters" },
            </span><span>//</span><span>      new Person { FullName = "Brice Lambson" },
            </span><span>//</span><span>      new Person { FullName = "Rowan Miller" }
            </span><span>//</span><span>    );
            </span><span>//
</span><span>        }
    }
}</span></portal.portalcontext>
Copier après la connexion

   2>、在程序包管理器控制台,执行语句:

PM> Add-Migration InitialCreate
Copier après la connexion

EF Code First Migrations数据库迁移

  执行成功后,在Migrations文件夹中新增类文件201309201556388_InitialCreate.cs

EF Code First Migrations数据库迁移

  3>、在程序包管理器控制台,执行语句:

PM> Update-Database -Verbose
Copier après la connexion
Copier après la connexion
Copier après la connexion

  执行结果生成与上面一致的数据库

EF Code First Migrations数据库迁移

  4>、在数据库模型中添加City类,执行程序包管理器控制台语句,Migrations文件夹中新增类文件201309201643300_AddCity.cs。

PM> Add-Migration AddCity
Copier après la connexion

  再次执行程序包管理器控制台语句

PM> Update-Database -Verbose
Copier après la connexion
Copier après la connexion
Copier après la connexion

EF Code First Migrations数据库迁移

  Portal控制台应用程序的代码结构:

EF Code First Migrations数据库迁移

  数据库更新成功之后,在数据库中新增表City。

EF Code First Migrations数据库迁移

2.2、版本回溯

  修改数据库中表City,删除其中字段ProvinceNo。在程序包管理器控制台中执行以下两条语句:

PM> Add-Migration ModifyCity
Copier après la connexion

PM> Update-Database -Verbose
Copier après la connexion
Copier après la connexion
Copier après la connexion

  执行成功之后,City表结构修改为:

EF Code First Migrations数据库迁移

  执行程序包管理器控制台语句,进行数据库版本回溯。

PM> Update-Database –TargetMigration:<span>"</span><span>201309201643300_AddCity.cs</span><span>"</span>
Copier après la connexion

2.3、生成数据库版本之间的Sql脚本

  执行程序包管理器控制台语句,生成数据库版本之间的Sql脚本。该操作仅为生成Sql语句,并未在数据库中进行执行。

Update-Database -Script -SourceMigration:<span>"</span><span>201309201643300_AddCity.cs</span><span>"</span> -TargetMigration:<span>"</span><span>201309201708043_ModifyCity.cs</span><span>"</span> 
Copier après la connexion

  其中-TargetMigration在未指定的情况,默认为迁移到最新的版本。

3、EF Code First Migrations语句的其他参数

1>、为指定的DbContext启用数据库迁移

PM> Enable-Migrations -ContextTypeName Portal.PortalContext
Copier après la connexion

2>、设置是否允许自动迁移

Enable-Migrations
Copier après la connexion

生成的Configuration.cs类文件的构造函数

<span>public</span><span> Configuration()
{
      AutomaticMigrationsEnabled </span>= <span>false</span><span>;
}</span>
Copier après la connexion

3>、Enable-Migrations指定项目名称

PM> Enable-Migrations -StartUpProjectName Portal
Copier après la connexion

如果在“Package Manager Console”中选择了默认项目可以不设置“-StartUpProjectName”参数;如果多次执行此命令可以添加-Force参数。

4>、查看所执行的Sql语句 -Verbose指令

Update-Database -Verbose 
Copier après la connexion

4、代码下载

Portal.zip

5、参考资料

http://msdn.microsoft.com/en-US/data/jj591621

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment le langage Go implémente-t-il les opérations d'ajout, de suppression, de modification et de requête de la base de données ? Comment le langage Go implémente-t-il les opérations d'ajout, de suppression, de modification et de requête de la base de données ? Mar 27, 2024 pm 09:39 PM

Le langage Go est un langage de programmation efficace, concis et facile à apprendre. Il est privilégié par les développeurs en raison de ses avantages en programmation simultanée et en programmation réseau. Dans le développement réel, les opérations de base de données font partie intégrante. Cet article explique comment utiliser le langage Go pour implémenter les opérations d'ajout, de suppression, de modification et de requête de base de données. Dans le langage Go, nous utilisons généralement des bibliothèques tierces pour faire fonctionner les bases de données, telles que les packages SQL couramment utilisés, gorm, etc. Ici, nous prenons le package SQL comme exemple pour présenter comment implémenter les opérations d'ajout, de suppression, de modification et de requête de la base de données. Supposons que nous utilisons une base de données MySQL.

Comment transférer l'historique des discussions WeChat vers un autre téléphone mobile Comment transférer l'historique des discussions WeChat vers un autre téléphone mobile May 08, 2024 am 11:20 AM

1. Sur l'ancien appareil, cliquez sur « Moi » → « Paramètres » → « Chat » → « Migration et sauvegarde de l'historique des discussions » → « Migrer ». 2. Sélectionnez l'appareil de la plate-forme cible à migrer, sélectionnez les enregistrements de discussion à migrer et cliquez sur « Démarrer ». 3. Connectez-vous avec le même compte WeChat sur le nouvel appareil et scannez le code QR pour démarrer la migration de l'historique des discussions.

Modernisation du cloud avec C++ : migration des applications héritées vers le cloud Modernisation du cloud avec C++ : migration des applications héritées vers le cloud Jun 01, 2024 am 09:21 AM

La meilleure façon de déplacer les anciennes applications C++ vers le cloud : Restructuration : migrez le code de l'application vers une plate-forme cloud native (telle que Kubernetes) et exploitez les services cloud. Cloudification : déployez des applications sur des plates-formes cloud et utilisez les services cloud sans refactorisation du code.

Tutoriel détaillé sur l'établissement d'une connexion à une base de données à l'aide de MySQLi en PHP Tutoriel détaillé sur l'établissement d'une connexion à une base de données à l'aide de MySQLi en PHP Jun 04, 2024 pm 01:42 PM

Comment utiliser MySQLi pour établir une connexion à une base de données en PHP : Inclure l'extension MySQLi (require_once) Créer une fonction de connexion (functionconnect_to_db) Appeler la fonction de connexion ($conn=connect_to_db()) Exécuter une requête ($result=$conn->query()) Fermer connexion ( $conn->close())

Comment Hibernate implémente-t-il le mappage polymorphe ? Comment Hibernate implémente-t-il le mappage polymorphe ? Apr 17, 2024 pm 12:09 PM

Le mappage polymorphe Hibernate peut mapper les classes héritées à la base de données et fournit les types de mappage suivants : join-subclass : crée une table séparée pour la sous-classe, incluant toutes les colonnes de la classe parent. table par classe : créez une table distincte pour les sous-classes, contenant uniquement des colonnes spécifiques aux sous-classes. union-subclass : similaire à join-subclass, mais la table de classe parent réunit toutes les colonnes de la sous-classe.

iOS 18 ajoute une nouvelle fonction d'album 'Récupéré' pour récupérer les photos perdues ou endommagées iOS 18 ajoute une nouvelle fonction d'album 'Récupéré' pour récupérer les photos perdues ou endommagées Jul 18, 2024 am 05:48 AM

Les dernières versions d'Apple des systèmes iOS18, iPadOS18 et macOS Sequoia ont ajouté une fonctionnalité importante à l'application Photos, conçue pour aider les utilisateurs à récupérer facilement des photos et des vidéos perdues ou endommagées pour diverses raisons. La nouvelle fonctionnalité introduit un album appelé "Récupéré" dans la section Outils de l'application Photos qui apparaîtra automatiquement lorsqu'un utilisateur a des photos ou des vidéos sur son appareil qui ne font pas partie de sa photothèque. L'émergence de l'album « Récupéré » offre une solution aux photos et vidéos perdues en raison d'une corruption de la base de données, d'une application d'appareil photo qui n'enregistre pas correctement dans la photothèque ou d'une application tierce gérant la photothèque. Les utilisateurs n'ont besoin que de quelques étapes simples

Une analyse approfondie de la façon dont HTML lit la base de données Une analyse approfondie de la façon dont HTML lit la base de données Apr 09, 2024 pm 12:36 PM

HTML ne peut pas lire directement la base de données, mais cela peut être réalisé via JavaScript et AJAX. Les étapes comprennent l'établissement d'une connexion à la base de données, l'envoi d'une requête, le traitement de la réponse et la mise à jour de la page. Cet article fournit un exemple pratique d'utilisation de JavaScript, AJAX et PHP pour lire les données d'une base de données MySQL, montrant comment afficher dynamiquement les résultats d'une requête dans une page HTML. Cet exemple utilise XMLHttpRequest pour établir une connexion à la base de données, envoyer une requête et traiter la réponse, remplissant ainsi les données dans les éléments de la page et réalisant la fonction de lecture HTML de la base de données.

Comment gérer les erreurs de connexion à la base de données en PHP Comment gérer les erreurs de connexion à la base de données en PHP Jun 05, 2024 pm 02:16 PM

Pour gérer les erreurs de connexion à la base de données en PHP, vous pouvez utiliser les étapes suivantes : Utilisez mysqli_connect_errno() pour obtenir le code d'erreur. Utilisez mysqli_connect_error() pour obtenir le message d'erreur. En capturant et en enregistrant ces messages d'erreur, les problèmes de connexion à la base de données peuvent être facilement identifiés et résolus, garantissant ainsi le bon fonctionnement de votre application.

See all articles