博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DotNetCore跨平台~EFCore连接Mysql的方式
阅读量:6673 次
发布时间:2019-06-25

本文共 2485 字,大约阅读时间需要 8 分钟。

在.net frameworks的ef里连接mysql我们已经测试通过了,而在dotnet core里的efCore上去连接mysql我们需要测试一下,并且在测试过程中出现了一些问题,当然最后也是解决了,下面总结一下,分享给大家!

  1. mysql项目的依赖包
  2. 数据上下文和连接串
  3. 数据仓储
  4. 添加模块扩展
  5. 业务层注入
  6. 业务实现

mysql项目的依赖包

  1. Microsoft.EntityFrameworkCore
  2. 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 { get; set; } public DbSet
Users { set; get; } }

数据仓储

实现继承基础设施里的EFRepository就可以了,我们需要为仓储传递一个数据上下文进来,就是上面定义的Mysql的上下文对象,这样你的仓储就可以操作这个上下文了.

public class ERPRepository
: EFRepository
where T : class { public ERPRepository() : base(new MySqlERPContext()) { } }

添加模块扩展

我们基础设施里有一些已经实现的功能,我们会做成扩展方法,方便以业务系统的使用,而和业务相关的对象,如业务仓储,业务上下文可以在业务系统添加扩展,方法后期的注入工作,一般的业务扩展代码如下

///     /// 对于当前项目的模块化扩展    ///     public static class ModuleExtensions    {        ///         /// 注册一个数据仓库        ///         ///         /// 
public static ModuleManager UseErpRepository(this ModuleManager configuration) { configuration.RegisterGenericModule( typeof(IRepository<>), typeof(ERPRepository<>)); return configuration; } /// /// 注册一个数据上下文 /// /// ///
public static ModuleManager UseErpContext(this ModuleManager configuration) { configuration.RegisterModule
(); return configuration; } }

业务层注入

模块的扩展实现之后,就是在业务系统初始化时注入它们,实现哪种方法就去注册哪里,一般在global或者startup里去实现注入功能.

      //注册模块            ModuleManager.Create()                         .UseAutofac()                         .UseESBIoC()                         .UseErpContext()                         .UseErpRepository();

业务实现

可以直接从模块里把对应的仓储取出来,然后执行对应的curd操作即可

      ModuleManager.Resolve
>().Insert(new Api.User { Name = "two" });

这样我们在dotnet core里通过efcore去操作mysql数据库就完成了,需要注意的是,在mysql连接串中,一定要添加SslMode=None这个属性,否则会启用ssl链接!

感谢各位阅读!

转载于:https://www.cnblogs.com/lori/p/7154675.html

你可能感兴趣的文章
Nagios简介与安装(1)
查看>>
centos 本地yum配置
查看>>
使用Vundle来管理vim的插件
查看>>
我们容易忽略的WebDriver 的一些方法
查看>>
Windows借助脚本实现自动化加域
查看>>
构造函数私有化
查看>>
我的友情链接
查看>>
Linux Shell编程
查看>>
归档与反归档
查看>>
Learning Data Structure_5_图(2)
查看>>
HDS G1000和Gx00的端口属性
查看>>
Innodb中mysql如何快速删除2T的大表
查看>>
bash基本命令的使用(笔记)
查看>>
windows_learn 002 用户管理和组策略
查看>>
kafka性能优化
查看>>
含有echart 图表的报表打印
查看>>
域控迁移为08 R2后无法访问Linux服务器共享
查看>>
我的友情链接
查看>>
华为认证考试
查看>>
我的友情链接
查看>>