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 的項目就完成了,後面講介紹如何在開發環境和生產環境修改數據庫結構
參考: