DotNet Core 2.0使用MySql实现Code First
本教程使用vs2017 + dotnet core2.0 + MySql5.7.19
1.打开vs2017,文件》新建》项目,选择Asp.Net Core Web应用程序。
2.项目名称可以写Test,新建的模板选择.net core 2.0的Web应用程序。如下图:
3.在项目根目录下新建一个Models文件夹。
4.在Models文件夹下新建一个User类。
public class User { public int Id { get; set; } public string UserName { get; set; } public string Password { get; set; } }
5.在Models文件夹下新建一个DataContext类。
//using Microsoft.EntityFrameworkCore; public class DataContext:DbContext { public DataContext(DbContextOptions<DataContext> options):base(options) { } public DbSet<User> Users { get; set; } }
6.通过Nuget添加Pomelo.EntityFrameworkCore.MySql。
7.修改Startup.cs文件,用于Code First创建数据库。这里可以有两种方法,依次来说。
7.1直接将数据库连接字符串硬编码在Startup.cs文件中
//using Microsoft.EntityFrameworkCore; //using Test.Models; public void ConfigureServices(IServiceCollection services) { var connection = @"Data Source=.;Database=Test;User ID=young;Password=young;pooling=true;CharSet=utf8;port=3306;sslmode=none"; services.AddDbContext<DataContext>(options => options.UseMySql(connection)); services.AddMvc(); }
7.2将数据库连接字符串放在配置文件中
在appsettings.json中添加节点,代码如下:
"ConnectionStrings": { "MySqlConnection": "Data Source=.;Database=Test;User ID=young;Password=young;pooling=true;CharSet=utf8;port=3306;sslmode=none" }
Startup.cs文件中的代码修改如下:
//using Microsoft.EntityFrameworkCore; //using Test.Models; public void ConfigureServices(IServiceCollection services) { var connection = Configuration.GetConnectionString("MySqlConnection"); services.AddDbContext<DataContext>(options => options.UseMySql(connection)); services.AddMvc(); }
8.依次点开:工具》打开Nuget包管理器》程序包管理控制台。
首先输入Add-Migration MyFirstMigration执行;
接着输入Update-Database执行。出现Done表示成功创建数据库。
遇到的问题:
发现通过code first创建的数据库居然不支持插入中文?
后来才发现是mysql的配置问题(我是使用ubuntu+mysql)。在/etc/mysql/my.cnf中做如下修改,添加以下红框内的文字:
为了方便复制粘贴,代码就直接贴出来:
[mysqld] init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake
重启mysql,sudo service mysql restart即可。
对问题进一步升级——让数据库支持emoji表情😂。
将上图中添加的代码,全部注释,并且添加新的代码,如下图:
下面是纯文字版代码:
[client] default-character-set=utf8mb4 [mysqld] character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect=’SET NAMES utf8mb4' [mysql] default-character-set=utf8mb4
之所以这样改,是因为,mysql的utf8编码的一个字符最多3个字节,但是一个emoji表情为4个字节,所以utf8不支持存储emoji表情。但是utf8的超集utf8mb4一个字符最多能有4字节,所以能支持emoji表情的存储。
参考文章:
posted on 2017-10-10 22:48 chenyangsocool 阅读(4312) 评论(2) 编辑 收藏 举报