简介

项目使用MSSql作为数据库,但是因为SQL服务器贵那么一点,并发连接差那么一点,要把数据迁移到MySQL,顺带迁移过程以及问题。

环境

· Visual Studio 2013

· MySQL 5.7

· Entity Framework 6.1.3

正文

迁移过程

1. 安装MySQL,顺带安装 MySQL for Visual Studio、MySQL Connector Net

2. 在Entity Framework 项目和 WebSite项目中添加Nuget包,MySql.Data.Entity,我这里添加的是6.9.6版本,添加时后会把MySQL.Data作为依赖项加入到项目中,完成后可以看到web.config和app.config下增加了MySQL的 provider和DbProvideFactories。

<entityFramework><defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"><parameters><parameter value="v11.0" /></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.9.9.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.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories></system.data>

3. 修改Web.config的连接字符串,providerName修改成:MySql.Data.MySqlClient。

<add name="DefaultConnection" providerName="MySql.Data.MySqlClient" connectionString="Data Source=127.0.0.1;Initial Catalog=Demo;User ID=root;Password=root" />

4. 回到EntityFramework项目中,找到DbContext类,为类添加属性:[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]

   [DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]public class MyDbContext : DbContext{/// <summary>/// 设置数据实体对应的数据库连接/// </summary>public MyDbContext() : base("DefaultConnection"){}//用Fluent api必须重写OnModelCreating方法protected override void OnModelCreating(DbModelBuilder modelBuilder){base.OnModelCreating(modelBuilder);modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();//移除复数表名的契约
        }}

5. OK,这些工作做完,基本就可以了,打开程序包管理器控制台,虔诚祈祷,然后输入:update-database

迁移过程问题

1. 未将对象引用设置到对象的实例。

问题描述:这是一个比较通用的错误提示,很多Error都会提示这个,网上找了一些不太对,最后发现是因为启动项设置为EF项目,同时默认项目也是EF项目,因为在config文件中不到连接字符串导致的。

解决方案:在EF的app.config中添加连接串,或者启动项目设置为WebSite。

2. underlying provider does not support the type 'nvarchar(max)'.

问题描述:字面意思就是说,provider不支持类型”nvarchar(max)”,这与MySQL数据库支持的数据类型有关系。

解决方案:找一下Entity定义中是不是有string类型,添加 属性如:     [StringLength(1000)],然后问题解决。

3. 提供程序未返回 ProviderManifestToken 字符串。

问题原因:连接字符串写错了 。

正确写法:data source不能用.代替

<add name="DefaultConnection" providerName="MySql.Data.MySqlClient" connectionString="Data Source=;Initial Catalog=demo;User ID=root;Password=root" />

4. 未解析成员“MySql.Data.MySqlClient.MySqlException,MySql.Data, Version=6.9.9.0, Culture=neutral, PublicKeyT

System.Runtime.Serialization.SerializationException:  
未解析成员“MySql.Data.MySqlClient.MySqlException,MySql.Data, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d”的类型。
在 System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
在 System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
在 System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force)
在 System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()  在 System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)  

解决方案:一般发生在从原来开发环境换到新的开发环境,在开发环境中缺少“mysql-connector-net”这个东西 ,下载安装即可。

5. 从索引 0 处开始,初始化字符串的格式不符合规范。

问题描述:这个问题和第一个差不多,只不过换了个提示方式,因为我在项目中有没有将包含连接字符串的项目设置为启动项,导致webconfig中缺少连接字符串导致的。

PM> update-database
指定“-Verbose”标志以查看应用于目标数据库的 SQL 语句。
System.ArgumentException: 从索引 0 处开始,初始化字符串的格式不符合规范。在 System.Data.Common.DbConnectionOptions.GetKeyValuePair(String connectionString, Int32 currentPosition, StringBuilder buffer, Boolean useOdbcRules, String& keyname, String& keyvalue)在 System.Data.Common.DbConnectionOptions.ParseInternal(Hashtable parsetable, String connectionString, Boolean buildChain, Hashtable synonyms, Boolean firstKey)在 System.Data.Common.DbConnectionOptions..ctor(String connectionString, Hashtable synonyms, Boolean useOdbcRules)在 System.Data.Common.DbConnectionStringBuilder.set_ConnectionString(String value)在 MySql.Data.MySqlClient.MySqlConnectionStringBuilder..ctor(String connStr)在 MySql.Data.MySqlClient.MySqlConnection.set_ConnectionString(String value)在 MySql.Data.MySqlClient.MySqlConnection..ctor(String connectionString)在 MySql.Data.Entity.MySqlConnectionFactory.CreateConnection(String connectionString)在 System.Data.Entity.Internal.LazyInternalConnection.Initialize()在 System.Data.Entity.Internal.LazyInternalConnection.get_Connection()在 System.Data.Entity.Internal.LazyInternalContext.get_Connection()在 System.Data.Entity.Infrastructure.DbContextInfo..ctor(Type contextType, DbProviderInfo modelProviderInfo, AppConfig config, DbConnectionInfo connectionInfo, Func`1 resolver)在 System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration, DbContext usersContext, DatabaseExistenceState existenceState, Boolean calledByCreateDatabase)在 System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration)在 System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.GetMigrator()在 System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.Run()在 System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)在 System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)在 System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)在 System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force)在 System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()在 System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)

解决方案:将包含连接字符串的项目设置为启动项目,将包含dbContext的项目设置为默认迁移项目,就是程序包管理控制台中的默认项目

转载于:https://www.cnblogs.com/buyixiaohan/p/7259342.html

EF6 Codefirst+MySql 数据库迁移相关推荐

  1. ef 数据迁移mysql_EF6 Codefirst+MySql 数据库迁移

    简介 项目使用MSSql作为数据库,但是因为SQL服务器贵那么一点,并发连接差那么一点,要把数据迁移到MySQL,顺带迁移过程以及问题. 环境 · Visual Studio 2013 · MySQL ...

  2. go mysql slave_【Golang+mysql】记一次mysql数据库迁移(一)

    # [记一次mysql数据库迁移(一)](https://github.com/stayfoo/stayfoo-hub/blob/master/docs/mysql/blog/%E8%AE%B0%E4 ...

  3. mysql 数据迁移_【AWS 功能】Mysql 数据库迁移至Amazon RDS方案

    今天,我们讲讲如何使用源MySQL数据库执行数据库迁移到MySQL数据库的目标Amazon RDS的方案,同时由于(源和目标数据库引擎是相同的)--模式结构.数据类型和数据库代码在源和目标数据库之间是 ...

  4. MySQL数据库迁移

    MySQL数据库迁移(数据文件直接迁移) 在今年10月下旬的时候,公司的服务器需要迁移,其中涉及到了MySQL数据库迁移.查看了一下MySQL数据文件的大小,接近60G的大小(实际数据并没用那么多). ...

  5. mysql数据库迁移方案

    怎样用命令行把MySQL数据库迁移到另一台Linux服务器 1.用dump命令备份数据库. #mysqldump-uroot-pdbfile>dbfile.sql 2.用rsync从新服务器获得 ...

  6. 现MySQL数据库迁移到新MySQL数据库中

    场景: 由于更换设备,需要将现mysql数据库迁移到新服务器的mysql数据库中. 迁移命令: 1.在源库mysql执行命令如下,将导出数据到/root/目录下 (1)导出所有数据库的表结构和数据 m ...

  7. mysql数据库搬家,MySQL数据库迁移上云-数据搬家不用愁

    MySQL数据库迁移上云 数据搬"家"不用愁 随着数字化时代的发展,越来越多的企业开始数字化转型.云上数据库能提升对数据库的使用及管理效率,给企业带来了很大经济效益.那么如何安全有 ...

  8. 服务器Mysql数据库迁移

    服务器Mysql数据库迁移 因公司云服务器即将到期并准备更换与平台,所以对云服务器数据库做迁移. 准备工具 Docker Navicat 迁移思路 新旧数据库同步,保证迁移过程中在不影响服务的情况下将 ...

  9. Mysql数据库迁移Mariadb完整方案

    Mysql数据库迁移Mariadb方案 一.       文档描述 l  目的:测试window和linux上MariaDB支持性. l  原则:window下保留原有Mysql ,安装MariaDB ...

最新文章

  1. PyTorch基础与简单应用:构建卷积神经网络实现MNIST手写数字分类
  2. 第28月第10天 iOS动态库
  3. Linux中默认的JDK版本设置
  4. sqoop导数据出现问题
  5. php event_base_new,php event拓展基本使用
  6. html读取servlet,简单html与servlet交互(HTML利用servlet读取txt)
  7. 关于linux系统端口查看和占用的解决方案
  8. (05)vtk通过多边形构建矩形,并拉伸成立方体,两个立方体独立操作
  9. opencv cv2 python RGB BGR 颜色表 配色
  10. n2n(Pear-to-pear) 内网穿透
  11. 2020新版小桔灯作文能力阶梯序列作文课件教案教材全套
  12. eventlet 协程
  13. JQuery加载图片自适应DIV大小
  14. MACOS 苹果系统 微信多开
  15. 仿中华英才网城市选择
  16. angelababy都靠它保持身材,只需10秒随时随地喝到新鲜果汁!
  17. 路漫漫其修远兮:js的成长经历(十二)——jQuery基础
  18. 最全的世界汽车标志欣赏和LOGO释义
  19. 基于Bootstrap的后台管理界面
  20. 吴恩达机器学习(五)逻辑回归练习-二分类练习

热门文章

  1. html文档支持代码高亮,为HTML中的代码添加语法高亮
  2. 海量中文语料上预训练ALBERT模型:参数更少,效果更好
  3. 给出中序和前序求后序Java,已知二叉樹前序,中序遍歷,求后序遍歷,java實現...
  4. dom4j实现为list添加父节点_最大堆的实现与原理
  5. LDA主题模型(算法详解)
  6. Hadoop权威指南(中文版,第2版)【分享】
  7. Java程序优化的一些最佳实践
  8. Windows 8 Directx 开发学习笔记(九)材质定义及混合光照效果实现
  9. 各种ListView列表方法
  10. OpenGl文章 Android OpenGL ES 简明开发教程