DotNetCore跨平台~EFCore连接Mysql的方式
在.net frameworks的ef里连接mysql我们已经测试通过了,而在dotnet core里的efCore上去连接mysql我们需要测试一下,并且在测试过程中出现了一些问题,当然最后也是解决了,下面总结一下,分享给大家!
- mysql项目的依赖包
- 数据上下文和连接串
- 数据仓储
- 添加模块扩展
- 业务层注入
- 业务实现
mysql项目的依赖包
- Microsoft.EntityFrameworkCore
- MySql.Data.EntityFrameworkCore
数据上下文和连接串
对于mysql的上下文和使用sql没什么两样,需要注意的是要添加的SSL的否定,否则同时会有异常出来
MySql.Data.MySqlClient.MySqlException: The host localhost does not support SSL connections.
public partial class MySqlERPContext : DbContext, IERPContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseMySQL(@"Server=localhost;database=ef;uid=root;pwd=root;SslMode=None"); base.OnConfiguring(optionsBuilder); } public DbSet<system_users> system_users { get; set; } public DbSet<User> Users { set; get; } }
数据仓储
实现继承基础设施里的EFRepository就可以了,我们需要为仓储传递一个数据上下文进来,就是上面定义的Mysql的上下文对象,这样你的仓储就可以操作这个上下文了.
public class ERPRepository<T> : EFRepository<T> where T : class { public ERPRepository() : base(new MySqlERPContext()) { } }
添加模块扩展
我们基础设施里有一些已经实现的功能,我们会做成扩展方法,方便以业务系统的使用,而和业务相关的对象,如业务仓储,业务上下文可以在业务系统添加扩展,方法后期的注入工作,一般的业务扩展代码如下
/// <summary> /// 对于当前项目的模块化扩展 /// </summary> public static class ModuleExtensions { /// <summary> /// 注册一个数据仓库 /// </summary> /// <param name="configuration"></param> /// <returns></returns> public static ModuleManager UseErpRepository(this ModuleManager configuration) { configuration.RegisterGenericModule( typeof(IRepository<>), typeof(ERPRepository<>)); return configuration; } /// <summary> /// 注册一个数据上下文 /// </summary> /// <param name="configuration"></param> /// <returns></returns> public static ModuleManager UseErpContext(this ModuleManager configuration) { configuration.RegisterModule<IERPContext, MySqlERPContext>(); return configuration; } }
业务层注入
模块的扩展实现之后,就是在业务系统初始化时注入它们,实现哪种方法就去注册哪里,一般在global或者startup里去实现注入功能.
//注册模块 ModuleManager.Create() .UseAutofac() .UseESBIoC() .UseErpContext() .UseErpRepository();
业务实现
可以直接从模块里把对应的仓储取出来,然后执行对应的curd操作即可
ModuleManager.Resolve<IRepository<User>>().Insert(new Api.User { Name = "two" });
这样我们在dotnet core里通过efcore去操作mysql数据库就完成了,需要注意的是,在mysql连接串中,一定要添加SslMode=None这个属性,否则会启用ssl链接!
感谢各位阅读!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2016-07-12 Lind.DDD.IoC(大叔推荐)~在服务定位器中引入IoC容器~容器的适配器
2013-07-12 将不确定变为确定~DateTime.MinValue和MaxValue引发的异常
2012-07-12 爱上MVC3系列~使用@需要注意的地方
2011-07-12 不忘本~explicit和implicit修饰符
2011-07-12 MVC3+EF4.1开发之一
2011-07-12 EF架构~了解一下,ADO.NET Entity Framework