如果大家刚使用EntityFramework Core作为ORM框架的话,想必都会遇到数据库迁移的一些问题。
起初我是在ASP.NET Core的Web项目中进行的,但后来发现放在此处并不是很合理,一些关于数据库的迁移,比如新增表,字段,修改字段类型等等,不应该和最上层的Web项目所关联,数据的迁移文件放到这里也感觉有点多余,有点乱乱的感觉,所以才想着单独出来由专门的项目进行管理会比较好,也比较清晰!
注意目标框架选择的是.NET Core 2.0而不是.NET Standard 2.0。
0、前期准备
a)、表实体定义,这个是在.NET Standard 2.0的类库中存放的。
/// <summary> /// 系统应用的用户实体 /// </summary> public class ApplicationUser : BaseModel { /// <summary> /// 用户名 /// </summary> public string UserName { get; set; } /// <summary> /// 密码 /// </summary> public string Password { get; set; } /// <summary> /// 邮件地址 /// </summary> public string Email { get; set; } }
b)、新建一个.NET Core 2.0的类库,并定义好我们所要使用的数据库上下文,很简单,接下来开始我们的正文
/// <summary> /// 系统上下文 /// </summary> public class LightContext : DbContext { public LightContext(DbContextOptions<LightContext> options) : base(options) { } /// <summary> /// 系统应用用户 /// </summary> public DbSet<ApplicationUser> ApplicationUser { get; set; } /// <summary> /// 角色表 /// </summary> public DbSet<Role> Role { get; set; } }
1、问题汇总
首先要确保仓储类库中已经引入以下两个Nuget包,没有的话请使用包管理器进行安装。不建议直接引入原包:Microsoft.AspNetCore.All,按需引入即可
Install-Package Microsoft.EntityFrameworkCore.SqlServer Install-Package Microsoft.EntityFrameworkCore.Tools
a)打开CMD,然后切换到类库所在路径下,执行以下命令。不过你也可以使用程序包管理器控制台(PMC)进行迁移,但是会有少许变化,部分命令见下表:
迁移命令描述
CMD命令
PMC命令
创建迁移:migrationname为迁移名称
dotnet ef migrations add migrationname
add-migration migrationname
移除迁移(删除最近的一次迁移)
dotnet ef migrations remove
remove-migration
应用最新的迁移(使迁移文件应用到数据库)
dotnet ef database update
update-database
应用指定的迁移
dotnet ef database update migrationname
update-database migrationname
查看迁移列表
dotnet ef migrations list
查看数据库上下文信息
dotnet ef dbcontext info
dotnet ef
错误提示:
未找到与命令“dotnet-ef”匹配的可执行文件
解决方法:
在项目文件Light.Repository.csproj中添加以下节点
<ItemGroup> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.1" /> </ItemGroup>
重新执行上面的命令,如果出现了EF Core的标志(一头蓄势待发的野马)表示已经成功
b)、执行以下命令进行迁移
dotnet ef migrations add InitLightDB
错误提示:
The specified framework version '2.0' could not be parsed
The specified framework 'Microsoft.NETCore.App', version '2.0' was not found.
- Check application dependencies and target a framework version installed at:
\
- Alternatively, install the framework version '2.0'.
解决方法:
在项目文件中添加以下节点:
<PropertyGroup> <TargetFramework>netcoreapp2.0</TargetFramework> <RuntimeFrameworkVersion>2.0.3</RuntimeFrameworkVersion> </PropertyGroup>
c)、重新执行b步骤的命令,报错信息如下:
错误提示: