在.NET Core类库中使用EF Core迁移数据库到SQL Serve

如果大家刚使用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的标志(一头蓄势待发的野马)表示已经成功

在.NET Core类库中使用EF Core迁移数据库到SQL Serve

b)、执行以下命令进行迁移

dotnet ef migrations add InitLightDB

在.NET Core类库中使用EF Core迁移数据库到SQL Serve

错误提示:

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步骤的命令,报错信息如下:

错误提示:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wdpwyd.html