EF Code First 连接MySql
看了很多文章,尝试了很多次总是进行不下去,整理一下,以便日后查看。
1、创建ASP.NET MVC项目(EFCodeFirst)
1.1、右键点击引用选择管理NuGet程序包下载MySql.Data.Entity.dll(有依懒项,会自动下载MySql.Data.dl 和 EntityFramework.dll)
1.2、修改Web.config文件(如下图)


2、创建类库(EFCodeFirst.DataAccess)
2.1、右键添加-->新建项-->选择数据-->选择ADO.NET实体数据模型-->空Code First模型(也可以不用这一步,但DatabaseAccess.cs文件需要自己创建)
2.1、右键点击引用选择管理NuGet程序包下载MySql.Data.Entity.dll(有依懒项,会自动下载MySql.Data.dl 如下图)

2.2、修改文件 DatabaseAccess.cs
修改之前:

修改之后:

代码如下:
namespace EFCodeFirst.DataAccess
{
using IdentityAuth.Common;
using IdentityAuth.Model.Sys;
using MySql.Data.MySqlClient;
using System;
using System.Data.Common;
using System.Data.Entity;
using System.Linq; public class DatabaseAccess : DbContext
{
#region 构造函数和初始化
private static string connectionStr { get; set; }
private static DbConnection GetConnection()
{
if (String.IsNullOrEmpty(connectionStr))
connectionStr = ConfigHelper.GetConnectionStr("EFCodeFirst"); if (String.IsNullOrEmpty(connectionStr))
throw new Exception("数据库连接字符串为空,请在Config文件里配置"); DbConnection dbConnection = new MySqlConnection() { ConnectionString = connectionStr };
return dbConnection;
} public DatabaseAccess() : base(DatabaseAccess.GetConnection(), true)
{
Database.SetInitializer<DatabaseAccess>(null);
}
#endregion #region 系统表
/// <summary>
/// 系统用户信息
/// </summary>
public DbSet<SysUserEntity> UserEntities { get; set; } /// <summary>
/// 角色信息
/// </summary>
public DbSet<SysRoleEntity> RoleEntities { get; set; } /// <summary>
/// 系统菜单信息
/// </summary>
public DbSet<SysMenuEntity> MenuEntities { get; set; } /// <summary>
/// 角色权限信息
/// </summary>
public DbSet<SysRoleAuthEntity> RoleAuthEntities { get; set; } /// <summary>
/// 角色用户信息
/// </summary>
public DbSet<SysRoleUserEntity> RoleUserEntities { get; set; } #endregion
}
}
2.3、修改App.config文件(如下图)

App.config文件如下:
<?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>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<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.10.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
</providers>
</entityFramework>
<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.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
</startup>
</configuration>
3、迁移
3.1、打开程序包管理控制器,默认项目选择 EFCodeFirst.DataAccess(也就是CodeFirst迁移目录,如下图)

3.2、添加迁移配置 Enable-Migrations(生成以下文件并会出现错误,如图)


3.3、解决3.2出现的错误,修改生成文件 Configuration.cs(如下图)

代码如下:
namespace EFCodeFirst.DataAccess.Migrations
{
using System;
using System.Data.Common;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.History;
using System.Linq; internal sealed class Configuration : DbMigrationsConfiguration<EFCodeFirst.DataAccess.DatabaseAccess>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator());
SetHistoryContextFactory("MySql.Data.MySqlClient", (conn, schema) => new MySqlHistoryContext(conn, schema));
} protected override void Seed(EFCodeFirst.DataAccess.DatabaseAccess context)
{
// This method will be called after migrating to the latest version. // You can use the DbSet<T>.AddOrUpdate() helper extension method
// to avoid creating duplicate seed data.
}
} public class MySqlHistoryContext : HistoryContext
{ public MySqlHistoryContext(DbConnection connection, string defaultSchema)
: base(connection, defaultSchema)
{} protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder); modelBuilder.Entity<HistoryRow>().Property(h => h.MigrationId).HasMaxLength().IsRequired();
modelBuilder.Entity<HistoryRow>().Property(h => h.ContextKey).HasMaxLength().IsRequired();
}
}
}
3.4、添加一个合并迁移命令行:Add-Migration [Name](eg:Add-Migration Add_Base_Table) Name 为一个合并的名称,自定义,最好不重复

3.5、生成SQL:Update-Database -Script(如果不需要SQL可不用执行)
3.6、迁移到数据库:Update-Database

EF Code First 连接MySql的更多相关文章
- C# 之 .net core -- EF code first连接Mysql数据库
一.在Models 新建两个数据库类 这个是数据库需要生成的类基础(塑造外观) public class User { [Key] public string ID { get; set; } [Ma ...
- .NET 5/.NET Core使用EF Core 5连接MySQL数据库写入/读取数据示例教程
本文首发于<.NET 5/.NET Core使用EF Core 5(Entity Framework Core)连接MySQL数据库写入/读取数据示例教程> 前言 在.NET Core/. ...
- EntityFramework 6.0< Code First > 连接 Mysql数据库(转)
http://blog.csdn.net/kmguo/article/details/19650299 网上有很多关于用EntityFrame来连接Mysql数据库的教程,可是很多并不靠谱,转载的太多 ...
- EntityFramework 6.0< Code First > 连接 Mysql数据库
网上有很多关于用EntityFrame来连接Mysql数据库的教程,可是很多并不靠谱,转载的太多了.找了很久,总算是配置好了,现在分享一下. 一,安装: 1.开发环境: VS2013与EF6 ...
- 转载:EntityFramework 6.0< Code First > 连接 Mysql数据库
转载自:http://blog.csdn.net/kmguo/article/details/19650299 网上有很多关于用EntityFrame来连接Mysql数据库的教程,可是很多并不靠谱,转 ...
- EF Code First连接现有数据库
作为一个初入学习.net MVC4 的新手,想写一写今天碰到的问题,做一个总结. 首先我想利用EF Code First来连接我现有数据库,而不是通过EF Code First来自动生成数据库和表. ...
- (转)EntityFrameword “Reverse Engineer Code First” 连接 MySql
转自:http://stackoverflow.com/questions/19676624/error-trying-to-reverse-engineer-code-first-mysql-dat ...
- Asp.net Mvc 使用EF6 code first 方式连接MySQL总结
最近由于服务器变更为Linux系统.MsSql for Linux什么时候出来到生产环境使用还是要很长时间的.于是考虑使用Mysql数据库,ORM使用EF.于是先踩下坑顺便记录一下,有需要的tx可以参 ...
- 【亲测】Asp.net Mvc5 + EF6 code first 方式连接MySQL总结
本文原文地址为:https://www.cnblogs.com/summit7ca/p/5423637.html 原文测试环境为windows 8.1+Vs2013+MySql5.7.12 本人在wi ...
随机推荐
- 【error】Gradle sync failed: Unable to start the daemon process.【已解决】
---恢复内容开始--- 在克隆GIT项目后,Android Studio 报错: Gradle sync failed: Unable to start the daemon process. Th ...
- Apache Flink 介绍
原文地址:https://mp.weixin.qq.com/s?__biz=MzU2Njg5Nzk0NQ==&mid=2247483660&idx=1&sn=ecf01cfc8 ...
- linux open write lseek的API和应用
1, open #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(c ...
- windows组策略实验-本地组策略和域控组策略
windows组策略实验-本地组策略和域控组策略 本地组策略只对本地计算机有效,域策略是计算机加入域环境后对加入域的一组计算机.用户定义的策略,便于管理 本地组策略: 一.实验环境 Windows 7 ...
- WinServer设置多用户登录
1.运行 gpedit.msc →computer configuration→administrative templates→windows componets→Remote Desktop→Re ...
- python 简史
---恢复内容开始--- Python的作者,Guido von Rossum,确实是荷兰人.1982年,Guido从阿姆斯特丹大学(University of Amsterdam)获得了数学和计算机 ...
- Demo更新列表
Sdk 对应的demo ESF (1)ESF/ESFramework.EntranceDemo.rar (2)ESF/4.ESFramework.Demos.Ftp.rar (3)ESF/6.ESFr ...
- 面试题解:输入一个数A,找到大于A的一个最小数B,且B中不存在连续相等的两个数字
玄魂工作室秘书 [玄魂工作室] 昨天发的算法有一处情况没考虑到,比如加一后有进位,导致又出现重复数字的情况,修正后今天重新发一次. 比如输入99,那B应该是101 因为100有两个连 ...
- 磁盘阵列raid类型及含义
raid0: 多块盘同时进行读写: 优点是读写效率高,缺点是没有数据冗余: 最少需要两块盘. raid1: 将数据盘都做镜像: 优点是有数据冗余:缺点是读写效率低,磁盘利用率低: 最少需要两块盘. r ...
- TabTopLayout【自定义顶部选项卡区域(固定宽度且居中)】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 自定义顶部选项卡并居中显示.结合显示/隐藏view的方式实现切换功能(正常情况下可能是切换fragment). 效果图 代码分析 T ...