.NetFramework+EF框架CodeFirst 自动创建MySQL数据库
文章目录一、本文目的二、配置1-1 创建实体1-2 新建 MyContext 类1-3 `web.config`配置一、本文目的 .Net EntityFramework4.7.2 应用程序台项目,使用 EF 框架 配置 MySQL数据库,并自动生成 MySQL 数据库。二、配置首先引入包MySql.Data.Entity(我使用的版本是 6.10.9.0)、EntityFramework1-1
文章目录
一、本文目的
.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迁移步骤】:
【执行结果】:
【注意】:
通过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()”失败。
【参考解决方案】:
- 连接数据库字符串错误,检查连接数据库字符串。
- 其中
MySQL.Data
与MySql.Data.Entity.EF6
的版本不一致,需要将这两个的 版本统一致。
【注意】:
配置中的 MySQL.Data 把版本号修改为当前用的版本号:
更多推荐
所有评论(0)