Mvc5 EF6 CodeFirst Mysql (一) 新建一个Mvc项目并使用EF连接到Mysql数据库

1.新建Mvc5项目,更改身份验证为:不进行身份验证,由于使用到webapi,勾选webapi选项

  

2.安装Entity Framework

  

 

 

3.安装mysql connector 地址:http://dev.mysql.com/downloads/connector/net/ 

 安装mysql-for-visualstudio 地址: http://dev.mysql.com/downloads/windows/visualstudio/

 这样可以在vs的 服务器资源管理器中直接添加MysqlDatabase的连接

 

4.在Mvc项目中引用Mysql

 

5.在models文件夹下新建3个model :Course、Enrollment、Student

  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>(); 保证表不带复数

  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环境部署和排错

 

posted on 2016-04-12 10:50  DeepSpace  阅读(1184)  评论(1编辑  收藏  举报