EF Core基于MySql数据库进行开发

这篇博客讲述了在.NET Core项目中遇到的EFCore版本兼容性问题。作者在尝试使用3.1版本的EFCore连接到MySQL数据库时,由于现有项目依赖于2.2版本,导致了类型加载异常。解决方案是回退到2.2版本的EFCore,以保持项目一致性。在使用 PMC 命令生成数据库模型时,也遇到了一些错误,最终通过调整命令参数成功生成了Model。
摘要由CSDN通过智能技术生成

由于业务的重叠,java组有一些功能,需要我们组提供api接口。我们组是.net,需要连接到mysql数据库,大学自学java时,研究过一段时间的mysql和oracle,就再也没做过相关的开发,工作都是和sql server打交道。首选肯定是ORM框架。折腾了一会还是遇到了一些坑吧。
我们的项目都是基于.net core进行开发的.首选EF Core框架进行数据的交互。
Solution下面的已有项目,都是基于2.2的 ef core版本进行开发的。
我在写demo时选择的是3.1的版本:搭配组合如下
在这里插入图片描述
在VS的PMC命令行使用的命令:

Scaffold-DbContext "server=;database=;user=;password=;port=" MySql.Data.EntityFrameworkCore -OutputDir Models -Force

可以正常生成数据库Model.
但在公司的项目,我尝试也使用3.1版本的进行开发,结果运行已有的api项目时会抛出以下异常:

Could not load type 'Microsoft.EntityFrameworkCore.Infrastructure. IDbContextOptionsExtensionWithDebugInfo

已有的其他项目都是2.2版本的.查了一下 IDbContextOptionsExtensionWithDebugInfo这个接口只能在2.2版本使用.由于项目之间的依赖关系.在runtime,会优先从最高版本去解析,高版本的不存在此接口,所以才抛出了这个异常。为了不改其他项目的代码,还是原路返回,在待开发的项目中装2.2版本的吧,

搭配的组合:
在这里插入图片描述
使用的数据库连接参数有所不同:
尝试用3.1的命令,会报一个异常:执行方法未发现.
PMC命令行使用的命令:

Scaffold-DbContext "Server=;port=;Database=;User ID=t;Password=;" MySql.Data.EntityFrameworkCore -OutputDir Models -Force

数据库连接字符串连接参考地址:
Connect String For Mysql In EF

<connectionStrings>
    <add name="MyContext" providerName="MySql.Data.MySqlClient"
        connectionString="server=localhost;port=3306;database=mycontext;uid=root;password=********"/>
</connectionStrings>
<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"/>
    <providers>
        <provider invariantName="MySql.Data.MySqlClient"
            type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework"/>
        <provider invariantName="System.Data.SqlClient"
            type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
    </providers>
</entityFramework>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值