一、本文目的

  .Net EntityFramework4.7.2 应用程序台项目,使用 EF 框架 配置 MySQL数据库,并自动生成 MySQL 数据库。

二、配置

首先引入包 MySql.Data.Entity(我使用的版本是 6.10.9.0)、EntityFramework

2-1 创建实体

首先创建实体类

/// <summary>
/// 用户实体
/// </summary>
public class Person
{
    /// <summary>
    /// Id
    /// </summary>
    public int Id { get; set; }
    /// <summary>
    /// 名字
    /// </summary>
    public string Name { get; set; }
}

2-2 新建 XXDbContext 类

PersonDbContext 继承 DbContext,属于类和数据库的桥梁。

using MySql.Data.Entity;
using System.Data.Entity;
using System.Configuration;

/// <summary>
/// XXDbContext:类和数据库的桥梁
/// </summary>
//[DbConfigurationType(typeof(MySqlEFConfiguration))]
public class PersonDbContext : DbContext
{
    /// <summary>
    /// 构造函数:Default 是Web.config 中 connectionstring 的名字。
    /// </summary>
    public PersonDbContext() : base("name=Default") { }
    /// <summary>
    /// 
    /// </summary>
    public DbSet<Person> Persons{ get; set; }
}

2-3 App.config 配置

.Net Framework 项目在 App.config进行配置。

 <!--数据库连接字符串-->
  <connectionStrings>
    <add name="Default" connectionString="server=127.0.0.1;port=3306;uid=root;pwd=xxx;database=PersonDb;Persist Security Info=True;" providerName="MySql.Data.MySqlClient" />
  </connectionStrings>

详细配置:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
  </startup>
  
  <entityFramework>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <!--引入MySql.Data.Entity包一般会会自动生成-->
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.10.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
    </providers>
  </entityFramework>

  <runtime>
  </runtime>  

  <system.data>
    <DbProviderFactories>
      <remove invariant="MySql.Data.MySqlClient" />
      <add name="MySql Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory,MySql.Data,Version=6.10.9.0 ,Culture=neutral,PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>
  
  <!--数据库连接字符串-->
  <connectionStrings>
    <add name="Default" connectionString="server=127.0.0.1;port=3306;uid=root;pwd=xxx;database=PersonDb;Persist Security Info=True;" providerName="MySql.Data.MySqlClient" />
  </connectionStrings>

</configuration>

2-4 运行应用程序

应用程序注项目代码:

static void Main(string[] args)
{
   // Database.SetInitializer(new DropCreateDatabaseIfModelChanges<PersonDbContext>());
    
    var context = new PersonDbContext();
	//创建数据库,如果不存在。
    //context.Database.CreateIfNotExists();
    //插入一行值
    context.Persons.Add(new Person { Name = "EF6MySQL" });
    // 保存改变
    context.SaveChanges();
}

【执行结果】:
运行结果

2-5 使用 PM 对数据库进行迁移

使用 PM 对数据库进行迁移:

// 启动迁移
Enable-Migrations

// 添加-迁移:日期——XXName类
Add-Migration 

// 修改数据库
Update-Database 

【PM迁移步骤】:
PM迁移数据库

【执行结果】:
PM执行结果
【注意】:
   通过2-4 和2-5 分别使用应用程序 和PM 迁移数据库 ,可以看出 PM 只创建了数据库,没有向表中添加数据。

三、程序包管理控制器(PM)常用命令

3-1 启动迁移

Enable-Migrations

3-2 添加迁移文件

Add-Migration

NAME: 自己定义

3-3 删除迁移文件

remove-Migrations

3-4 迁移数据库

update-database

// 还原所有迁移
update-database -migration:0

// 还原不同版本migration数据库
update-database migrationName

3-5 版本回溯

update-database -TargetMigration

四、常见错误

4-1 The provider did not return a ProviderManifestToken string

【问题描述】:The provider did not return a ProviderManifestToken string方法“MySql.Data.MySqlClient.MySqlProviderServices.GetDbProviderManifestToken(System.Data.Common.DbConnection)”尝试访问方法“MySql.Data.MySqlClient.MySqlConnection.get_Settings()”失败。

【参考解决方案】:

  1. 连接数据库字符串错误,检查连接数据库字符串。
  2. 其中 MySQL.DataMySql.Data.Entity.EF6的版本不一致,需要将这两个的 版本统一致。

在这里插入图片描述
【注意】:
配置中的 MySQL.Data 把版本号修改为当前用的版本号:
MySQL版本配置

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐