使用mysql配置asp.net core 1.1.2 + ef core code first及相关坑

这篇博客介绍了如何在ASP.NET Core 1.1.2中使用Entity Framework Core (EF Core) 和 MySQL进行Code First开发。内容包括设置connectionStrings、添加必要的NuGet包、创建数据库上下文、模型以及在Startup.cs中的配置。博主还提到了遇到的一些问题,如PowerShell指令的版本问题和NuGet包管理的复杂性,并建议使用ASP.NET Core以减轻开发负担。
摘要由CSDN通过智能技术生成

这里写自定义目录标题

使用mysql配置asp.net core 1.1.2 + ef core code first及相关坑

asp.net core的好处显而易见
坏处也很明显就是对新人尤其是最近刚发布时候的所有开发者来说
学习曲线太过陡峭而且资料实在太少
各种资料也是歪七硕八太难用或者教了别扭的用法
网上的一些教程确实能连通数据库但写来写去的写法啊都too样
绝大部分教程只适用于asp.net core 1.0甚至standard
这里就把这几天研究到的成果发一下
本文可能不适用于最新的asp.net core 2.0 preview
因为1.0和1.1.2的文件布局及api变化都很大请注意
若有不足欢迎指证
禁止转载、随意转载的司马没丁丁

1、首先准备好mysql及vs2017
2017自带了asp.net core 1.1.2
2015就要注意下vs

2、配置connectionStrings
很多转来转去的教程上把connectionString写在DbContext继承类中的
override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
方法中
我就想问下这么写你们老师知道么?
正确的做法是修改appsettings.json文件
在根级节点添加如下配置
“ConnectionStrings”: {
“DefaultConnection”: //这里随意定义json key名 “server=localhost;database=test_base;uid=root;pwd=123456;charset=utf8;pooling=true;”
},
无论是mysql还是其它数据库
应自行修改连接字符串内容

3、添加ef及相关包
打开vs菜单上的工具——nuget包管理器
无论通过命令行或管理项目包(第一个和第二个选项)皆可
打开nuget管理器后
添加EntityFrameworkCore包及EntityFrameworkCore.Tools包
添加mysql的相关包Mysql.Data.EntityFrameworkCore preview版(截止目前版本为7.0.7)
添加方法请自行谷哥
前两个是ef的ms官方包不要加错了

4、添加mvc模型及dbcontext继承类
这里简单用User类来做演示
public class User {
[Key]
public int id {get;set;} // 为了数据绑定数据库字段这里必须使用访问器
[Required]
public string name;
}
public class RegisterFormModel {
[Required]
public string name {get;set;} // 为了绑定页面数据这里必须使用访问器
}
AccountController文件中的部分代码

private DbUser userDao;

public AccountController(DbUser dbUser)
{//这里使用了asp.net自带的依赖注入功能、不需要显式new对象
userDao = dbUser;
}
[HttpPost]
public IActionResult register(RegisterFormModel m)
{
if(ModelState.IsValid)
{
User u = new User();
u.name= m.name;
new UserService().register(userDao, u);
return RedirectToAction(nameof(index));
}
else
{
return Content(“model.isvalid”);
}
最好将业务逻辑从控制器中分离出来
建立单独的UserService类
因为这里只做演示就不处理返回值了
public class UserService
{
public void register(DbUser dbUser, User u)
{
dbUser.addAsync(u);
}
}
关键的UserDbContext类

public class DbUser : DbContext
{
public DbSet users { get; set; }
// 必须使用带参数的构造方法
public DbUser(DbContextOptions options) : base(options)
{// 检测数据库中是否存在该库及表、若用现有的库则不会创建表、导致后面save时报错
Database.EnsureCreated();
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{// 这里用来重命名表名、ef 6时代使用的[Table(“table_name”)]注解好像没用了、求验证
modelBuilder.Entity().ToTable(“sys_user”);
}

public void addAsync(User u)
{
users.Add(u);
SaveChanges();
}
}
html就不放了
保证input标签中name字段与model类中的字段名一致即可

5、修改startup.cs配置代码
在void ConfigureServices(IServiceCollection services)方法中添加如下代码及相关引用
string connectionString = Configuration.GetConnectionString(“DefaultConnection”);
services.AddEntityFrameworkMySQL();
services.AddDbContext(options => options.UseMySQL(connectionString));
这才是正确姿势好嘛
在每个dbcontext继承类里实现onConfiguration方法是什么鬼

至此所有流程全部走完了(应该
部署并运行项目提交表单后
应该就能看到数据库中生成了新库及新表并插入数据了
以下说几个一直被搞糊涂的坑

1、powershell问题
1、1 新表添加
部分教程教你使用Add-Migrate指令去在数据库中添加表或做迁移
做迁移或许可以这么用但新项目新表绝对不应该这么麻烦
区区一个code first应该上手简便不应该这么复杂
应该至少与ef 6保持同步
即没有新表的时候会自动根据映射类生成
1、2 版本问题
某天早上醒来后就发现powershell里的一些指令不能用了
报错无法在powershell 2.0上使用指令
包括上面的Add-Migrate会报这样的错
那么下一个吧下完4.0装好后
发现指令直接没了
还有Update-Database
好像都直接移除了
也不知道是移除了还是对应版本的指令没有装
反正很麻烦

2、nuget版本管理问题
nuget本来是个好东西
但是asp.net core一出来就搞了这么多东西
又是nuget又是bow让新人完全没法接受
而且版本兼容不好做
新人下了包之后版本不对都不知道怎么删
core 1.0(preview?)时的删除不仅可以通过删除右侧的依赖项右键删除
还能在项目根目录下的project.json(好像是这个名字)配置文件中删除
vs会自动检测并动态移除
到了1.1.2之后看到包冲突都傻了
依赖项分开了core依赖和nuget依赖
真是复杂啊

3、session做成了中间件
这个只能自己去额外下官方session中间件了
我觉得应该一开始就配置上去但可以作为中间件移除
不然一开始接触的人发现session都用不了简直一头雾水
加完了还得在Startup.cs文件的
void ConfigureServices(IServiceCollection services)
方法中添加语句
services.AddSession();
才能启用

总而言之能够有asp.net core新框架
趁早把java这破船给打爆轰沉
让码农能从繁重的体力劳动中解除出来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值