asp.net mvc entityframework sql server 迁移至 mysql方法以及遇到的问题
背景:
我原来的项目是asp.net mvc5 + entityframework 6.4 for sql server(localdb,sql server),现在需要把数据库切换成mysql,理论上entityframework是可以完全做到无缝切换,毕竟ORM的设计就是为了兼容不同的底层数据库。
步骤:
- 下载 mysql-connector-net-8.0.20.msi 并安装(其实没有什么必要,可以直接从nuget下安装)
- nuget 安装 MySql.Data.EntityFramework,MySql.Data,注意:MySql.Data.Entity 和 MySql.Data.EntityFramework 应该只要一个就好了,我就安装 MySql.Data.EntityFramewor
- 配置webconfig
<connectionStrings>
<remove name="DefaultConnection"/>
<!--使用scaffold生成controller 时要先注销以下配置-->
<add name="DefaultConnection" connectionString="server=localhost;port=3306;database=webapp;uid=root;password=root;Persist Security Info=True" providerName="MySql.Data.MySqlClient" />
<!--<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB; Initial Catalog=webappv4;Integrated Security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />-->
</connectionStrings>
<!--<entityFramework >
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>-->
<!--使用scaffold生成controller 时要先注销以下配置-->
<entityFramework codeConfigurationType="MySql.Data.EntityFramework.MySqlEFConfiguration, MySql.Data.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.EntityFramework, Version=8.0.20.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> </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=8.0.20.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>web.config
修改dbcontext
// 使用scaffold生成controller 时要先注销以下配置
[DbConfigurationType(typeof(MySqlEFConfiguration))]
public class StoreContext : DbContext
{ public StoreContext()
: base("name=DefaultConnection") {
//获取登录用户信息,tenantid
//QueryFilterManager.AllowPropertyFilter = true;
//var claimsidentity = (ClaimsIdentity)HttpContext.Current.User?.Identity;
//var tenantclaim = claimsidentity?.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid");
//var tenantid = Convert.ToInt32(tenantclaim?.Value);
//设置当对Work对象进行查询时默认添加过滤条件
//QueryDbSetFilterManager.Filter<Work>(q => q.Where(x => x.TenantId == tenantid));
//this.Filter<Work>(q => q.Where(x => x.TenantId == tenantid));
//设置当对Order对象进行查询时默认添加过滤条件
//QueryDbSetFilterManager.Filter<Order>(q => q.Where(x => x.TenantId == tenantid));
//this.Filter<Order>(q => q.Where(x => x.TenantId == tenantid));
//QueryDbSetFilterManager.InitilizeGlobalFilter(this); }
}dbcontext.cs
- 执行迁移命令,重新创建数据库表名
//执行命令前先删除项目Migrations下的文件
enable-migrations
add-migration md_initpm>
- 修改 dbcontext
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//Oracle 表所有者,(SQL 改成 dbo(默认),也可删除此设置)
modelBuilder.HasDefaultSchema(string.Empty);
//默认把string类型转换成nvarchar,原本nlogtext
modelBuilder.Properties<string>().Configure(c => c.IsUnicode(false));
base.OnModelCreating(modelBuilder); }
测试
通常情况做完这些修改就可以运行起来了。
遇到的问题

再使用scaffold生成controller的时候会报错,这样的错误网上一搜一堆,但所有的解决方法我都试了,不行。无解,问题应该是mysql.data.entityframework的问题我用vs.net 2019,暂时没有在其它低版本下试过。
目前我的解决方法是,通过修改web.config,在需要用scaffold生成controller的时候把涉及到mysql entityframework的配置全部还原成sql server的配置,等生成成功了,在把配置改回到mysql.
我不知道你们有没有遇到这样的问题,有完美解决的解决方案吗。如果知道的请留言,不甚感激
asp.net mvc entityframework sql server 迁移至 mysql方法以及遇到的问题的更多相关文章
- ASP.NET MVC与Sql Server交互,把字典数据插入数据库
在"ASP.NET MVC与Sql Server交互, 插入数据"中,在Controller中拼接sql语句.比如: _db.InsertData("insert int ...
- ASP.NET MVC与Sql Server交互, 插入数据
在"ASP.NET MVC与Sql Server建立连接"中,与Sql Server建立了连接.本篇实践向Sql Server中插入数据. 在数据库帮助类中增加插入数据的方法. p ...
- Incorporating ASP.NET MVC and SQL Server Reporting Services, Part 2
In the last issue, I introduced you to the basics of incorporating SQL Server Reporting Services int ...
- 从Microsoft SQL Server迁移到MySQL指南
转自 https://www.mysql.com/why-mysql/white-papers/sql-server-to-mysql-zh/ 由于 MySQL 将节约成本.自由选择平台.特性丰富等优 ...
- Incorporating ASP.NET MVC and SQL Server Reporting Services, Part 1
Your ASP.NET MVC application needs reports. What do you do? In this article, I will demonstrate how ...
- ASP.NET MVC与Sql Server建立连接
用惯了使用Entity Framework连接数据库,本篇就来体验使用SqlConnection连接数据库. 打开Sql Server 2008,创建数据库,创建如下表: create table P ...
- abp项目 从sql server迁移至mysql
官方资料:https://aspnetboilerplate.com/Pages/Documents/EF-MySql-Integration 实验发现,还差了两步 整理一下,步骤如下: 1.引用My ...
- (转)如何将数据库从SQL Server迁移到MySQL
一.迁移Database Schema. 首 先使用Sybase Powerdesigner的逆向工程功能,逆向出SQL Server数据库的物理模型.具体操作是在Powerdesigner中选择“F ...
- SQL Server 迁移至MySQL 关键步骤的梳理总结
迁移主要是通过Navicat工具来实现的.迁移工具的选定在此不讨论. 迁移前准备 1.提前通知DBA\SA\BI等,并确认发布计划及数据库迁移方案. 2.梳理出SQL Server DB 中影响业务 ...
随机推荐
- 核心task
由于Ant具有跨平台的特性,因此编写Ant生成文件时可能会失去一些灵活性.为了弥补这个不足,Ant提供了一个“exec”核心task,允许执行特定操作系统上的命令.
- L9循环神经网络进阶 ModernRNN
GRU RNN存在的问题:梯度较容易出现衰减或爆炸(BPTT) ⻔控循环神经⽹络:捕捉时间序列中时间步距离较⼤的依赖关系 RNN: Ht=ϕ(XtWxh+Ht−1Whh+bh) H_{t} = ϕ(X ...
- C. Beautiful Regional Contest
用前缀和写一直wa.. 思路:让金牌和银牌最少,通多增加铜牌的方式来扩大总奖牌的个数. #include<bits/stdc++.h> using namespace std; map&l ...
- windows编译动态链接库,dll+lib的形式
之前一直在linux上做开发,没怎么关注过windows上如何编译动态链接库.不过一直存疑,为什么windows上的动态链接库是.dll配合.lib使用的,这个又是怎么生成的呢,通过一段时间的查资料和 ...
- icepdf和pdfbox转pdf文档为图片
icepdf转pdf文档为图片 首先导入icepdf jar包或maven pdfPath为pdf文件路径.pdfimgpsth为图片保存的路径 public static void icePdfIm ...
- 详解 I/O流
I/O流是用于处理设备之前信息传输的流,在我们今后的学习甚至是工作中,都是十分重要的. 在我们的日常生活中,也是很常见的,譬如:文件内容的合并.设备之键的文件传输,甚至是下载软件时的断点续传,都可以用 ...
- CVE-2018-12613 的一些思考
复现 CVE-2018-12613 的一些思考,关于文件包含路径的问题 漏洞 /index.php 第 55 行 $target_blacklist = array ( 'import.php', ' ...
- [数据库]Mysql蠕虫复制增加数据
将查询出来的数据插入到指定表中,例: 将查询user表数据添加到user表中,数据会成倍增加 insert into user(uname,pwd) select uname,pwd from use ...
- ASP.NET Core技术研究-全面认识Web服务器Kestrel
因为IIS不支持跨平台的原因,我们在升级到ASP.NET Core后,会接触到一个新的Web服务器Kestrel.相信大家刚接触这个Kestrel时,会有各种各样的疑问. 今天我们全面认识一下ASP. ...
- Java 创建 Excel 数据透视表
Excel 数据透视表具有强大的数据处理功能,能够使表格中的数据更加直观化.使用Excel 数据透视表,能方便用户快速的排序. 筛选各种数据,同时也能满足用户对不同数据汇总的需求.本文将介绍如何在Ja ...