Asp.net Core 2.0+EntityFrameWorkCore 2.0添加数据迁移
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 使用中间件拦截请求和返回数据,并对数据进行加密解密。
原文:asp.net core 使用中间件拦截请求和返回数据,并对数据进行加密解密. GitHub demo https://github.com/zhanglilong23/Asp.NetCore. ...
- ASP.NET Core教程【二】从保存数据看特有属性与服务端验证
前文索引: 在layout.cshtml文件中,我们可以看到如下代码: <a asp-page="/Index" class="navbar-brand" ...
- ASP.NET Core教程【二】从保存数据看Razor Page的特有属性与服务端验证
前文索引:ASP.NET Core教程[一]关于Razor Page的知识 在layout.cshtml文件中,我们可以看到如下代码: <a asp-page="/Index" ...
- 升级 asp.net core 1.1 到 2.0 preview
Upgrading to .NET Core 2.0 Preview 1 更新 依赖的类库 改为 标准库 2 web app 更改 csproj 文件---升级版本 <PropertyGrou ...
- ASP.NET Core学习之五 EntityFrameworkCore
目的:运用EntityFrameworkCore ,使用codefirst开发 一.创建web项目 创建一个不进行身份验证的 ASP.NET Core Web Application (.NET ...
- 011.Adding Search to an ASP.NET Core MVC app --【给程序添加搜索功能】
Adding Search to an ASP.NET Core MVC app 给程序添加搜索功能 2017-3-7 7 分钟阅读时长 作者 本文内容 1.Adding Search by genr ...
- ASP.NET CORE RAZOR :向 Razor 页面添加验证
https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/razor-pages/validation 本部分中向 Movie 模型添加了验证逻辑. ...
- Asp.net core通过自定义特性实现双端数据验证的一些想法
asp.net core集成了非常方便的数据绑定和数据校验机制,配合操作各种easy的vs,效率直接高到飞起. 通过自定义验证特性(Custom Validation Attribute)可以实现对于 ...
- 在ASP.NET Core中用HttpClient(一)——获取数据和内容
在本文中,我们将学习如何在ASP.NET Core中集成和使用HttpClient.在学习不同HttpClient功能的同时使用Web API的资源.如何从Web API获取数据,以及如何直接使用Ht ...
随机推荐
- 使用update_attribute和validation
在使用update_attribute方法时,不走validation 走validation的方法: create create! save save! update update_attribut ...
- vue router的浏览器跳转行为
最近做的项目中,涉及vue router 路由操作,其操作方法不同,产生的行为亦不同.本文通过对比实验,对其行为进行实验对比及总结,避免混淆. vue router的单页跳转的history模式,类似 ...
- IOS开发常见第三方总结
链接](https://github.com/languages/Objective-C/most_watched) * [three20](https://github.com/facebook ...
- Python---战机小游戏,学习pygame
import pygame # 导入游戏包 pygame.init() # 导入并初始化所有pygame模块,使用其他模块之前必须先调用init()方法 print('下面是游戏代码:') # 绘制矩 ...
- 不停机不停服务,MYSQL可以这样修改亿级数据表结构
摘 要:本文阐述了MySQL DDL 的问题现状.pt-online-schema-change的工作原理,并实际利用pt-online-schema-change工具在线修改生产环境下1.6亿级数 ...
- c#基础学习(0706)之使用虚方法实现多态
使用虚方法实现多态 namespace _0706 { class Program { static void Main(string[] args) { //这个时候调用的是父类的方法 Person ...
- Springboot --- Spring Security (一)
文章部分图片来自参考资料 问题 : Spring Security 内部实现的原理是什么 概述 Spring Security 是个安全框架,可以提供认证,防止网络功能等功能,可以结合 sprin ...
- FileStream文件的使用
// FileStream//(操作字节的)水一勺一勺的 可以操作任意格式的文件 //File一下子就读出来 //读取文本文件 // FileMode.OpenOrCreate你针 ...
- 大话JVM(一):垃圾收集算法
系列介绍|本系列主要是记录学习jvm过程中觉得重要的内容,方便以后复习 在说垃圾收集算法之前,先要说一下垃圾收集,从大的讲,垃圾收集需要考虑三件事情: 1.哪些内存需要回收 2.什么时候回收 3.如 ...
- 第三节:我的第一个Java程序
一.编写我的第一个Java程序流程: 1.新建一个文本文档:在电脑任意位置“右击”----->选择“新建”----->选择“文本文档”: 2.修改文档名与后缀名:“右击”新建的文本文档-- ...