Asp.net Core 2.0+EntityFrameWorkCore 2.0添加数据迁移
2017-10-08 17:13
711 查看
Core
Asp.net Core 由于依赖注入的广泛使用,配置数据迁移,与Asp.net大不相同,本篇介绍一下Asp.net Core添加数据迁移的过程
添加Nuget包
首先新建一个 Model 类 User:
然后建立MyDbContext类
然后配置AppSetting.json,添加数据库连接字符串:
在Startup.cs文件中注入数据库服务:
然后就可以进行数据迁移了,由于Asp .net Core 默认开启数据迁移,所以直接添加数据迁移就可以了
下面添加种子数据,这里不得不说踩过的一个大坑,添加种子数据的时候不仅与EF6.0 大不相同,跟EF Core1.X也大相径庭,也怪自己,不去看官方文档,非要去找教程(目前网上大部分教程都是1.x),哎,说多了都是泪。
有大佬指出,这里用的方法不是种子,去看了看官方文档,EF Core中并没有Seed方法,所以这里时添加测试数据,并不是种子。
添加一个初始化数据类,命名为SeedData.cs
与EF Core 1.x不同的是,2.0是在Program.cs里的Main方法里(1.x是在Startup.cs中的Configure方法中)添加初始化方法。修改Main方法为:
接下来更新数据库
没有问题,去数据库里查看,添加的 种子数据 测试数据并没有加进来SQL Profile中并没有监测到添加数据操作。在Main方法加个断点,启动IIS执行,逐步执行,发现,只有在程序运行的时候,才会添加种子 测试数据到数据库。
Asp.net Core 由于依赖注入的广泛使用,配置数据迁移,与Asp.net大不相同,本篇介绍一下Asp.net Core添加数据迁移的过程
添加Nuget包
Install-Package Microsoft.EntityFrameworkCore.SqlServer
Install-Package Microsoft.EntityFrameworkCore.Tools
Install-Package Microsoft.EntityFrameworkCore.Design
首先新建一个 Model 类 User:
public class User { //用户编号(自增长主键) [Key] public long UserId { get; set; } //用户名(必填项) [MaxLength(30),Required] public string UserName { get; set; } //密码(必填项) [MaxLength(16),DataType(DataType.Password),Required] public string Password { get; set; } }
然后建立MyDbContext类
public class BlogDbContext:DbContext { //由于依赖注入的关系,不加构造函数这里会出现警告,但不影响数据迁移文件的建立,更新数据库也没影响 public BlogDbContext(DbContextOptions<BlogDbContext> options):base(options) { } protected override void OnConfiguring(DbContextOptionsBuilder builder) { //添加数据库连接字符串 builder.UseSqlServer(@"Server=.;User id=sa;Password=123;Database=BlogDbContext"); } protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builder); //添加FluentAPI配置 var typesToRegister = Assembly.GetExecutingAssembly().GetTypes().Where(q => q.GetInterface(typeof(IEntityTypeConfiguration<>).FullName) != null); foreach(var type in typesToRegister) { dynamic configurationInstance = Activator.CreateInstance(type); builder.ApplyConfiguration(configurationInstance); } } //User相关表 public DbSet<User> Users { get; set; } }
然后配置AppSetting.json,添加数据库连接字符串:
"ConnectionStrings": { "DefaultConnection": "Server=.;User Id=sa;Password=123;Database=BlogDbContext;" },
在Startup.cs文件中注入数据库服务:
public void ConfigureServices(IServiceCollection services) { services.AddDbContext<BlogDbContext>(options => options.UseSqlServer("DefaultConnection")); services.AddMvc(); }
然后就可以进行数据迁移了,由于Asp .net Core 默认开启数据迁移,所以直接添加数据迁移就可以了
Add-Migration Init
下面添加种子数据,这里不得不说踩过的一个大坑,添加种子数据的时候不仅与EF6.0 大不相同,跟EF Core1.X也大相径庭,也怪自己,不去看官方文档,非要去找教程(目前网上大部分教程都是1.x),哎,说多了都是泪。
有大佬指出,这里用的方法不是种子,去看了看官方文档,EF Core中并没有Seed方法,所以这里时添加测试数据,并不是种子。
添加一个初始化数据类,命名为SeedData.cs
public static class SeedData { /// <summary> /// /// 配置测试数据 /// /// </summary> public static void Initialize(IServiceProvider app) { var _dbContext= app.GetRequiredService<BlogDbContext>(); //如果已经有数据就直接返回 if(_dbContext.Users.Any()) { return; } //添加User测试数据 _dbContext.Users.Add(new User { UserName = "Niko", Password = "123" }); _dbContext.SaveChanges(); } }
与EF Core 1.x不同的是,2.0是在Program.cs里的Main方法里(1.x是在Startup.cs中的Configure方法中)添加初始化方法。修改Main方法为:
public static void Main(string[] args) { var host = BuildWebHost(args); using (var scope = host.Services.CreateScope()) { var services = scope.ServiceProvider; try { SeedData.Initialize(services); } catch(Exception ex) { var logger = services.GetRequiredService<ILogger<Program>>(); logger.LogError(ex, "An error occurred seeding the DB"); } } host.Run(); }
接下来更新数据库
Update-Database -Verbose
没有问题,去数据库里查看,添加的 种子数据 测试数据并没有加进来SQL Profile中并没有监测到添加数据操作。在Main方法加个断点,启动IIS执行,逐步执行,发现,只有在程序运行的时候,才会添加种子 测试数据到数据库。
相关文章推荐
- Asp.net Core 2.0+EntityFrameWorkCore 2.0添加数据迁移
- ASP.NET CORE系列【六】Entity Framework Core 之数据迁移
- 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-2
- Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL
- ADO.NET .net core2.0添加json文件并转化成类注入控制器使用 简单了解 iTextSharp实现HTML to PDF ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下 C# AutoMapper 了解一下
- 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-3
- asp.net Core Entity Framework 7 数据库更新维护
- 使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序
- 使用 Visual Studio 的 ASP.NET Core MVC 和 Entity Framework Core 入门 (1 of 10)
- 创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表
- Setup Entity Framework Core in ASP.NET Core
- 创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表
- ASP.NET Core 开发 - Entity Framework (EF) Core
- Asp .net core api+Entity Framework core 实现数据CRUD数据库中(附Git地址)
- asp.net core2.0 JWT Bearer 注意添加认证服务
- ASP.NET Core:使用EntityFrameworkCore操作MySql来丰富仓储模块
- 使用 ASP.NET Core, Entity Framework Core 和 ABP 创建N层Web应用 第二篇
- 使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序
- ASP.NET Core 1.0: Using Entity Framework Core 1.0 - Transaction
- ASP.NET Core 操作数据库提示“Microsoft.EntityFrameworkCore.DbUpdateException”