由于业务的重叠,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>