一直想搞一个EFCodeFirst的Demo,让自己通过实例真正了解CodeFirst,方便以后有需求的时候可以有思路。网上查了很多资料,发现很多博主的文章大量重复,根据推荐步骤走并不一定能够成功,而且有些注意点没有讲清楚,导致我花费了很长时间才搞定。
现在把具体步骤写出来,总结,记录,分享下EFCodeFirst的精简实例。
Mysql的安装步骤不再给出,安装过程对本实例没有影响,只要记住mysql的root账号密码即可。
Mysql安装完成后需要能使用MySql WorkBench登陆,并看到本机所有的数据库(后面会用到)。
环境:
- VS2017
- .net v4.0
- Mysql v5.7
- EntityFramework v6.0
- MySql.Data v6.9.12
- MySql.Data.Entity v6.9.1
-
新建项目
新建控制台项目,命名随意,我名称设置为EFCodeFirstDemo
-
添加必要引用
当前项目名称上,右键-管理NuGet程序包,安装下图中的组件包,注意对应的版本(版本不同可能会有一些影响,具体未知,有时间的话可以研究下不同版本的效果)
在VS2017中,点击程序包后,右侧可选择安装版本
-
编辑数据库连接字符串
在App.config中插入如下字符
Server:数据库地址
port:数据库端口
Initial Catalog:本项目对应的数据库名称(此时数据库可不存在,程序运行后会自动创建,不要用在数据库连接工具中手动创建的,否则程序不会再自动创建表) 最终的App.config文件内容如下,有不同的建议酌情修改,但不要完全复制:
-
新建类/表
using System;namespace CodeFirstDemo{ public class Student { public string ID { get; set; } public string Name { get; set; } public Int32 Age { get; set; } public string Sex { get; set; } public Boolean State { get; set; } public DateTime? CreateTime { get; set; } }}
如果没有指定主键ID会被默认设置为主键
using System.Data.Entity;namespace CodeFirstDemo{ public class CodeFirstDbContext: DbContext { public CodeFirstDbContext() : base("name=MyContext") { } public DbSetStuden { get; set; } }}
MyContext为App.Config中对应的的Name
-
测试代码
using System;namespace CodeFirstDemo{ class Program { static void Main(string[] args) { CodeFirstDbContext db = new CodeFirstDbContext(); db.Database.CreateIfNotExists(); for (int i = 0; i < 10; i++) { Student s = new Student { ID = Guid.NewGuid().ToString(), Name = "Name-" + i, Age = 10 + i, Sex = "God", State = true, CreateTime = DateTime.Now }; db.Studen.Add(s); } db.SaveChanges(); } }}
确认无误后运行:
自动生成的数据库和表
插入的数据:
以上内容如有纰漏欢迎指出,如在操作过程中有其他疑问也可直接留言