一、在NuGet安装EF
1、 Pomelo.EntityFrameworkCore.MySql
2、Pomelo.EntityFrameworkCore.MySql.Design
3、Microsoft.EntityFrameworkCore.Tools
二、新建identity用户角色实体类和数据库上下文
用户类和角色类
public class ApplicationUser : IdentityUser
{
//扩展用户属性
}
public class ApplicationRole : IdentityRole
{
//扩展角色属性
}
数据库上下文
public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, string>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
}
}
三、在appsettings.json文件中配置数据库连接字符串
"ConnectionStrings": {
"DefaultConnection": "Server=127.0.0.1;database=testdb;uid=root;password=pwd123456;TreatTinyAsBoolean=true"
},
注意TreatTinyAsBoolean=true 最好加上 原因:bool类型字段对应到ef会生产bit字段。如果不在连接字符串中添加TreatTinyAsBoolean=true 插入数据的时候会报Unable to cast object of type 'System.Boolean' to type 'System.Int16这个错
四、在Startup文件中注册数据库上下文服务和对identity进行相关设置
注册服务
services.AddDbContext<ApplicationDbContext>(options => options.UseMySql(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, ApplicationRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
对identity进行配置(可不做!)
services.Configure<IdentityOptions>(options =>
{
// Password settings
options.Password.RequireDigit = false;
options.Password.RequiredLength = 6;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireUppercase = false;
options.Password.RequireLowercase = false;
options.Password.RequiredUniqueChars = 1;
// Lockout settings
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(30);
options.Lockout.MaxFailedAccessAttempts = 10;
options.Lockout.AllowedForNewUsers = true;
// User settings
options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
options.User.RequireUniqueEmail = false;
});
services.ConfigureApplicationCookie(options =>
{
// Cookie settings
options.Cookie.HttpOnly = true;
options.Cookie.Expiration = TimeSpan.FromDays(150);
// If the LoginPath isn't set, ASP.NET Core defaults
// the path to /Account/Login.
options.LoginPath = "/Account/Login";
// If the AccessDeniedPath isn't set, ASP.NET Core defaults
// the path to /Account/AccessDenied.
options.AccessDeniedPath = "/Account/AccessDenied";
options.SlidingExpiration = true;
});
五、迁移(在程序包管理控制台中)
1、输入Enable-Migrations 开启迁移
2、输入Add-Migration Initial建立快照(Initial快照名称随意写)
成功之后生成迁移文件
3、输入 Update-Database 升级数据库
成功之后查看数据库生成情况
新增数据表
一、添加实体类TestTable
public class TestTable
{
public int TestTableId { get; set; }
public string TestTableName { get; set; }
}
在数据库上下文中添加表映射
public DbSet<TestTable> TestTable { get; set; }
Add-Migration Initial1 执行迁移
Update-Database 升级数据库