1.新建Mvc5项目,更改身份验证为:不进行身份验证,因为使用到webapi,勾选webapi选项html
2.安装Entity Frameworkmysql
3.安装mysql connector 地址:http://dev.mysql.com/downloads/connector/net/ web
安装mysql-for-visualstudio 地址: http://dev.mysql.com/downloads/windows/visualstudio/sql
这样能够在vs的 服务器资源管理器中直接添加MysqlDatabase的链接数据库
4.在Mvc项目中引用Mysqlwindows
5.在models文件夹下新建3个model :Course、Enrollment、Studentapi
public class Course { [DatabaseGenerated(DatabaseGeneratedOption.None)] public int CourseID { get; set; } public string Title { get; set; } public int Credits { get; set; } public virtual ICollection<Enrollment> Enrollments { get; set; } }
public enum Grade { A, B, C, D, F } public class Enrollment { public int EnrollmentID { get; set; } public int CourseID { get; set; } public int StudentID { get; set; } public Grade? Grade { get; set; } public virtual Course Course { get; set; } public virtual Student Student { get; set; } }
public class Student { public int ID { get; set; } public string LastName { get; set; } public string FirstMidName { get; set; } public DateTime EnrollmentDate { get; set; } public virtual ICollection<Enrollment> Enrollments { get; set; } }
6.建立数据上下文:新建文件夹DAL,添加类:DemoDbContext服务器
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))] public class DemoDbContext : DbContext { static DemoDbContext() { Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DemoDbContext>()); } public DemoDbContext() : base("EFContext") { } public DbSet<Student> Students { get; set; } public DbSet<Enrollment> Enrollments { get; set; } public DbSet<Course> Courses { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); } }
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))] 若是去掉这一句,EF自动建立数据库时会报错,而此时建立控制器又会报错,因此建立控制器的时候注销这句就能够了数据结构
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 保证表不带复数ide
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DatabaseContext>()); 当数据库发生变化时,可以从新建库,须要注意的是测试数据会所有被删除,因此只能用开发环境
构造函数数中的DbConnectionString 是存在webconfig中的数据库链接字符串
<connectionStrings> <add name="EFContext" connectionString="server=192.168.0.183;user id=root;password=w123456;persistsecurityinfo=True;database=MvcDemo" providerName="MySql.Data.MySqlClient" /> </connectionStrings>
7.开发环境中,若是数据结构发生变化,须要从新建库,每次建库后要从新插入测试数据,能够用DropCreateDatabaseIfModelChanges类来实现(生成环境中请使用 Migrations作数据迁移),在DAL文件夹中新建类:DbInitializer
<entityFramework> <contexts> <context type="MvcDemo.DAL.DemoDbContext,MvcDemo" disableDatabaseInitialization="true"> <databaseInitializer type="MvcDemo.DAL.DbInitializer,MvcDemo"></databaseInitializer> </context> </contexts> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"> </provider></providers> </entityFramework>
disableDatabaseInitialization="true" 能够禁用数据初始化
配置webconfig
<entityFramework> <contexts> <context type="MvcDemo.DAL.DemoDbContext,MvcDemo"> <databaseInitializer type="MvcDemo.DAL.DbInitializer,MvcDemo"></databaseInitializer> </context> </contexts> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"> </provider></providers> </entityFramework>
运行结果:
8.添加一个StudentController,先生成一次项目,而后添加控制器
9.在_layout.cshtml添加连接
<li>@Html.ActionLink("学生", "Index", "Student")</li> <li>@Html.ActionLink("教师", "Index", "Course")</li> <li>@Html.ActionLink("课程", "Index", "Instructor")</li> <li>@Html.ActionLink("部门", "Index", "Department")</li>
至此一个简单MVC EF Codefirst 访问Mysql 的项目就完成了,后面讲介绍如何在开发环境和生产环境修改数据库结构
参考: