EF6 Codefirst+MySql 数据库迁移

时间:2023-12-05 08:12:14
    • 简介
      • 项目使用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。
    EF6 Codefirst+MySql 数据库迁移

    EF6 Codefirst+MySql 数据库迁移
  3. 修改Web.config的连接字符串,providerName修改成:MySql.Data.MySqlClient。

    EF6 Codefirst+MySql 数据库迁移
  4. 回到EntityFramework项目中,找到DbContext类,为类添加属性:[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]

    EF6 Codefirst+MySql 数据库迁移
  5. OK,这些工作做完,基本就可以了,打开程序包管理器控制台,虔诚祈祷,然后输入:update-database
  • 迁移问题
  1. 未将对象引用设置到对象的实例。
  • 问题描述:这是一个比较通用的错误提示,很多Error都会提示这个,网上找了一些不太对,最后发现是因为启动项设置为EF项目,同时默认项目也是EF项目,因为在config文件中不到连接字符串导致的。
  • 解决方案:在EF的app.config中添加连接串,或者启动项目设置为WebSite。
  • EF6 Codefirst+MySql 数据库迁移
  • underlying provider does not support the type 'nvarchar(max)'.
    • 问题描述:字面意思就是说,provider不支持类型”nvarchar(max)”,这与MySQL数据库支持的数据类型有关系。
    • EF6 Codefirst+MySql 数据库迁移
    • 解决方案:找一下Entity定义中是不是有string类型,添加 属性如:     [StringLength(1000)],然后问题解决。