MySQL CodeFirst的配置与注意事项
mysql+ef的配置相比较mssql+ef来说复杂一些。我的感受就是配置难度在于插件版本造成的各种不兼容问题。另外参考了很多博客,将多个博客里的经验综合才得以实现,因为不是每个人的操作都和那些博客作者描述的情况一致,不过解决之后其他都好说。现在从零开始操作mysql+CodeFirst的实现,总结我的配置过程。先确保安装并打开了mysql数据库:
1.新建控制台项目
2.在程序包管理器控制台里依次安装(注意:EF版本一定要低,另外第②和第③保证版本一致,因为③和②有依赖关系,版本不一致会导致一些问题)
①Install-Package EntityFramework -Version 6.1.3
②Install-Package MySql.Data -Version 6.8.8
③Install-Package MySql.Data.Entity -Version 6.8.8
3.App.Config配置文件里添加:
<connectionStrings>
<add name="connStr" connectionString="data source=127.0.0.1;user
id=root;password=123456;database=sqltest;" providerName="MySql.Data.MySqlClient" />
</connectionStrings>
4.依次新建Person实体类,PersonConfig类,详细代码:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
class PersonConfig : EntityTypeConfiguration<Person>
{
public PersonConfig()
{
this.ToTable("T_Persons");
}
}
5.新建MyContext类,详细代码(注意:如果不在类上方做DBConfigurationType标记的话会在最终操作update-database时出错,别忘记):
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
class MyContext : DbContext
{
public MyContext()
: base("name=connStr")//name对应配置文件里的连接字符串name属性
{ }
public DbSet<Person> Persons { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Configurations.AddFromAssembly(Assembly.GetExecutingAssembly());
}
}
6.继续在程序包管理器控制台运行命令Enable-Migrations -force,成功后将会出现如图所示信息:
注意:此时在项目下会自动生成文件夹和一个类,如图所示:
7.打开Configuration.cs,将AutomaticMigrationsEnabled的值修改为true,并且在程序包管理器控制台运行命令update-database -force,成功后将会出现如图所示信息:
注意:没在MyContext类上方标记DBConfigurationType害得我这一步浪费了好几个小时,会提示No MigrationSqlGenerator found for provider 'MySql.Data.MySqlClient'. Use the SetSqlGenerator method in the target migrations configuration class to register additional SQL generators.
8.现在来测试效果。目前mysql里没有名字叫sqltest的数据库存在,CodeFirst是通过代码来自动生成数据库的。主函数代码如下:
using (MyContext ctx = new MyContext())
{
Person per1 = new Person { Name = "per1", Age = 12 };
Person per2 = new Person { Name = "per2", Age = 17 };
Person per3 = new Person { Name = "per3", Age = 19 };
ctx.Persons.Add(per1);
ctx.Persons.Add(per2);
ctx.Persons.Add(per3);
ctx.SaveChanges();
Console.WriteLine("添加成功");
}
Console.ReadKey();
9.运行后如果成功,刷新Navicat for MySQL的数据库列表可以发现新生成的数据库:
注意:①自动生成了__migrationhistory表说明配置很成功。②PersonConfig.cs里的this.ToTable("T_Persons");影响实体类映射成功后的表名。③默认Id字段为主键并且自增,因此不需要手动为Id属性赋值。
MySQL CodeFirst的配置与注意事项的更多相关文章
- Apache,PHP,MySQL,PMA手动配置的注意事项
注:本文之前发布在自己的QQ空间,复制过来的时候,颜色信息丢失了,回头有空再把颜色重新标上! 前言:LAMP(Linux+Apache+MySQL+PHP)环境是目前开源社区最活跃的开发和运行平台,有 ...
- MySQL安装、配置、测试
MySQL安装.配置.测试(win7_64bit) 目录 1.概述 2.本文用到的工具 3.MySQL安装配置 4.Java访问MySQL测试 5.注事事项 6.相关博文 >>看不清的图片 ...
- 阿里云服务器 ECS 部署lamp:centos+apache+mysql+php安装配置方法 (centos7)
阿里云服务器 ECS 部署lamp:centos+apache+mysql+php安装配置方法 (centos7) 1.效果图 1 2. 部署步骤 1 1. mysql安装附加(centos7) 7 ...
- mysql 安装与配置、使用
http://www.cnblogs.com/shenliang123/p/3203546.html CentOs中mysql的安装与配置 在linux中安装数据库首选MySQL,Mysql数据库的第 ...
- MYSQL设置远程账户登陆总结,mysql修改、找回密码、增加新用户,MySQL数据库的23个注意事项
1.5 设置及修改Mysql root用户密码1 设置密码方法mysqladmin -u root password '123456'mysqladmin -u root -p'123456' pas ...
- MySQL主从复制的原理和注意事项都在这儿了!!
写在前面 最近在写Mycat专题,由于不少小伙伴最近要出去面试,问我能不能简单写下MySQL的主从复制原理和注意事项,因为在之前的面试中被问到了这些问题.我:可以啊,安排上了!! 主从复制原理 (1) ...
- 将数据从MySQL迁移到Oracle的注意事项
将数据从MySQL迁移到Oracle的注意事项1.自动增长的数据类型处理MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值.ORACLE没有自动增长的数据类型,需要建立一个自动 ...
- MYSQL多实例配置方法 mysqld_multi方法
在实际的开发过程中,可能会需要在一台服务器上部署多个MYSQL实例,那建议使用MYSQL官方的解决方案 mysqld_multi 1.修改my.cnf 如一个定义两个实例的参考配置: [mysqld_ ...
- MySQL 安装 + 精简 + 配置
MySQL 安装 + 精简 + 配置 下载安装 从官网 下载 Community Edition MySQL 5.6 版本 精简 根目录下只留 [data/bin/share] , my-defaul ...
随机推荐
- javascript内置函数提供的显式绑定
内置函数提供的显式绑定 最近在开发中遇到使用arr.map(module.fun) 这样的写法时(在一个模块调用了另外一个模块的方法), 造成了函数中this丢失的问题, 显示为undefined, ...
- 红楼梦 + 写入 MySQL
import requests import re import pymysql from bs4 import BeautifulSoup conn = pymysql.Connect(host=' ...
- 58同城Java面试
总结这一次面试失败的不冤 很多知识,都是了解.知道,而没有做到明白与彻底的弄懂 差距还是比较大的 以后要多来写总结,提升自己,争取早日被认可 说说今天面试的主要内容和问题吧 希望大家集思广益 面试职位 ...
- Cypress系列(22)- 可操作类型的命令 之 select()
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html .select() 在 <sele ...
- Ubuntu18.04 安装QQ、Tim、微信与win无差异
一.安装deepin-wine环境: 桌面下打开终端,依次输入以下命令 git clone https://gitee.com/wszqkzqk/deepin-wine-for-ubuntu.git ...
- Serval and Parenthesis Sequence【思维】
Serval and Parenthesis Sequence 题目链接(点击) Serval soon said goodbye to Japari kindergarten, and began ...
- iOS/swift 单选框和复选框
/** 复选框 */ import UIKit class LYBmutipleSelectView: UIView { var selectindexs:[Int]=[]//选中的 //标题数组 v ...
- (十)HttpClient以multipart/form-data上传文件
原文链接:https://blog.csdn.net/wsdtq123/article/details/78888734 POST上传文件 最早的HTTP POST是不支持文件上传的,给编程开发带来很 ...
- conda 切换为国内源
添加清华源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda con ...
- 【vue】axios二次封装,更好的管理api接口和使用
在现在的前端开发中,前后端分离开发比较主流,所以在封装方法和模块化上也是非常需要掌握的一门技巧.而axios的封装也是非常的多,下面的封装其实跟百度上搜出来的axios封装或者axios二次封装区别不 ...