EF Code First Migrations数据库迁移
1、EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework。 在程序包管理器控制台中执行以下语句,安装EntityFramework。 PM Install-Package EntityFramework 安装成功后,界面提示如下图: 在新建的Portal控制台
1、EF Code First创建数据库
新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework。
在程序包管理器控制台中执行以下语句,安装EntityFramework。
PM> Install-Package EntityFramework
安装成功后,界面提示如下图:
在新建的Portal控制台应用程序中添加两个实体类,代码结构如下:
其中,类文件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>
在静态构造函数中,设置了当数据库模型发生改变时,则删除当前数据库,重建新的数据库。
代码执行后,生成的数据库:
2、EF Code First数据库迁移
2.1、生成数据库
修改类文件PortalContext.cs的静态构造函数,取消当数据库模型发生改变时删除当前数据库重建新数据库的设置。
<span>static</span><span> PortalContext() { Database.SetInitializer</span><PortalContext>(<span>null</span><span>); }</span>
1>、在程序包管理器控制台,执行语句:
PM> Enable-Migrations -EnableAutomaticMigrations
执行成功后,Portal控制台应用程序代码结构中,添加Migrations文件夹,并生成类文件Configuration.cs。
<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 </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>
2>、在程序包管理器控制台,执行语句:
PM> Add-Migration InitialCreate
执行成功后,在Migrations文件夹中新增类文件201309201556388_InitialCreate.cs
3>、在程序包管理器控制台,执行语句:
PM> Update-Database -Verbose
执行结果生成与上面一致的数据库
4>、在数据库模型中添加City类,执行程序包管理器控制台语句,Migrations文件夹中新增类文件201309201643300_AddCity.cs。
PM> Add-Migration AddCity
再次执行程序包管理器控制台语句
PM> Update-Database -Verbose
Portal控制台应用程序的代码结构:
数据库更新成功之后,在数据库中新增表City。
2.2、版本回溯
修改数据库中表City,删除其中字段ProvinceNo。在程序包管理器控制台中执行以下两条语句:
PM> Add-Migration ModifyCity
PM> Update-Database -Verbose
执行成功之后,City表结构修改为:
执行程序包管理器控制台语句,进行数据库版本回溯。
PM> Update-Database –TargetMigration:<span>"</span><span>201309201643300_AddCity.cs</span><span>"</span>
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>
其中-TargetMigration在未指定的情况,默认为迁移到最新的版本。
3、EF Code First Migrations语句的其他参数
1>、为指定的DbContext启用数据库迁移
PM> Enable-Migrations -ContextTypeName Portal.PortalContext
2>、设置是否允许自动迁移
Enable-Migrations
生成的Configuration.cs类文件的构造函数
<span>public</span><span> Configuration() { AutomaticMigrationsEnabled </span>= <span>false</span><span>; }</span>
3>、Enable-Migrations指定项目名称
PM> Enable-Migrations -StartUpProjectName Portal
如果在“Package Manager Console”中选择了默认项目可以不设置“-StartUpProjectName”参数;如果多次执行此命令可以添加-Force参数。
4>、查看所执行的Sql语句 -Verbose指令
Update-Database -Verbose
4、代码下载
Portal.zip
5、参考资料
http://msdn.microsoft.com/en-US/data/jj591621

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

苹果公司最新发布的iOS18、iPadOS18以及macOSSequoia系统为Photos应用增添了一项重要功能,旨在帮助用户轻松恢复因各种原因丢失或损坏的照片和视频。这项新功能在Photos应用的"工具"部分引入了一个名为"已恢复"的相册,当用户设备中存在未纳入其照片库的图片或视频时,该相册将自动显示。"已恢复"相册的出现为因数据库损坏、相机应用未正确保存至照片库或第三方应用管理照片库时照片和视频丢失提供了解决方案。用户只需简单几步

如何在PHP中使用MySQLi建立数据库连接:包含MySQLi扩展(require_once)创建连接函数(functionconnect_to_db)调用连接函数($conn=connect_to_db())执行查询($result=$conn->query())关闭连接($conn->close())

PHP中处理数据库连接报错,可以使用以下步骤:使用mysqli_connect_errno()获取错误代码。使用mysqli_connect_error()获取错误消息。通过捕获并记录这些错误信息,可以轻松识别并解决数据库连接问题,确保应用程序的顺畅运行。

在Golang中使用数据库回调函数可以实现:在指定数据库操作完成后执行自定义代码。通过单独的函数添加自定义行为,无需编写额外代码。回调函数可用于插入、更新、删除和查询操作。必须使用sql.Exec、sql.QueryRow或sql.Query函数才能使用回调函数。

可以通过使用gjson库或json.Unmarshal函数将JSON数据保存到MySQL数据库中。gjson库提供了方便的方法来解析JSON字段,而json.Unmarshal函数需要一个目标类型指针来解组JSON数据。这两种方法都需要准备SQL语句和执行插入操作来将数据持久化到数据库中。

通过Go标准库database/sql包,可以连接到MySQL、PostgreSQL或SQLite等远程数据库:创建包含数据库连接信息的连接字符串。使用sql.Open()函数打开数据库连接。执行SQL查询和插入操作等数据库操作。使用defer关闭数据库连接以释放资源。

MySQL是一个开源的关系型数据库管理系统。1)创建数据库和表:使用CREATEDATABASE和CREATETABLE命令。2)基本操作:INSERT、UPDATE、DELETE和SELECT。3)高级操作:JOIN、子查询和事务处理。4)调试技巧:检查语法、数据类型和权限。5)优化建议:使用索引、避免SELECT*和使用事务。

要避免PHP数据库连接错误,请遵循最佳实践:检查连接错误,变量名称与凭据匹配。使用安全存储或环境变量,避免硬编码凭据。使用完后关闭连接,防止SQL注入,使用准备好的语句或绑定参数。
