Mvc5 EF6 CodeFirst Mysql (一) 新建一個Mvc項目並使用EF鏈接到Mysql數據庫

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; }

    }
View Code
   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; }
    }
View Code
   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; }
   }
View Code

 

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>();
        }
    }
View Code

  [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>
View Code

 

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>
View Code

  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>
View Code

  運行結果:

   

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>
View Code

 

至此一個簡單MVC EF Codefirst 訪問Mysql 的項目就完成了,後面講介紹如何在開發環境和生產環境修改數據庫結構

 

參考:

使用MVC5的EF6 Code First入門系列:創建一個EF數據模型

Win10+VS2015+EF6.0+MySQL5.6+MVC環境部署和排錯

相關文章
相關標籤/搜索