回到目录

在.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> 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链接!

感谢各位阅读!

回到目录

DotNetCore跨平台~EFCore连接Mysql的方式的更多相关文章

  1. DotNetCore跨平台~EFCore数据上下文的创建方式

    回到目录 对于DotNetCore来说,把大部分组件者放在DI容器里,在startup中进行注入,在类的构造方法中进行使用,如果某些情况下,无法使用这种DI的方式,也可以自己控制数据上下文的生产过程, ...

  2. .Net Core控制台&EFCore连接Mysql

    在用惯了Asp.Net Core提供的基架后,反过来想一想,貌似忘记了控制台如何去连接数据库了,因此,写一篇文章来借此巩固下并以后再来回顾时,加快步骤. 1.新建一个.Net Core控制台,然后安装 ...

  3. DotNetCore跨平台~EFCore废弃了TransactionScope取而代之的Context.Database.BeginTransaction

    回到目录 TransactionScope是.net平台基于的分布式事务组件,它默认为本地事务,同时当系统有需要时可以自动提升为分布式事务,而对系统的前提是要开启MSDTC服务,必要时需要在数据库服务 ...

  4. .NetCore教程之 EFCore连接Mysql DBFirst模式

    一:创建EF的类库,同时将此项目设置为启动项(为Scaffold-DbContext -tables指令使用),同时安装2个包   ①Microsoft.EntityFrameworkCore.Too ...

  5. DotNetCore跨平台~文章索引~永久更新

    本索引目录主要包括仓储大叔对dotnet core架构的研究与知识积累,从2016年开始进行撰写,到今天已经有一年多了,其中有一些小知识,小技巧,小应用,希望给大家在开发时一些启发,也希望dotnet ...

  6. 使用tomcat的jndi方式连接mysql的字符编码设置

    最近新项目使用tomcat中配置jndi连接mysql的方式,在使用过程中发现查询条件为中文的时候查询不出结果,经过一通折腾,发现是jndi在连接数据库的时候忘记设置字符编码. 修改之后的完整配置如下 ...

  7. 数据库~dotnetcore连接Mysql插入中文失败

    到目录 在dotnetcore里,连接mysql数据,插入中文时出现无法识别,并提示插入失败的情况,分析后得知它是编码问题,即数据库编码问题,你的中文在数据表里无法被识别! 解决方法(一) 进行mys ...

  8. nodejs连接mysql并进行简单的增删查改

    最近在入门nodejs,正好学习到了如何使用nodejs进行数据库的连接,觉得比较重要,便写一下随笔,简单地记录一下 使用在安装好node之后,我们可以使用npm命令,在项目的根目录,安装nodejs ...

  9. Python 3.2: 使用pymysql连接Mysql

    在python 3.2 中连接MYSQL的方式有很多种,例如使用mysqldb,pymysql.本文主要介绍使用Pymysql连接MYSQL的步骤 1        安装pymysql ·       ...

随机推荐

  1. JMeter-MyEclipse编译运行问题(Could not read JMeter properties file)

    JMeter-MyEclipse编译运行问题按照 此贴 http://phoenix0529.iteye.com/blog/1530728 进行配置,然后用Ant编译Build.xml 是可以的. 但 ...

  2. 学习python的第一个小目标:通过requests+xlrd实现简单接口测试,将测试用例维护在表格中,与脚本分开。

    小白的学习方式:通过确定一个小目标来想办法实现它,再通过笔记来加深印象. 面对标题中的小目标我陷入了思考....嗯,首先实现利用xlrd库来取出想要的用例 首先用表格准备好用例,如图下: 先试下取nu ...

  3. webpack 2.x 配置

    以下展示2.x 配置文件信息 v1 迁移至 v2 官方有更详细的说明 具体详见 https://webpack.js.org/guides/migrating/ 只列举常用到参数进行描述, 或者我在使 ...

  4. CTE递归 MAXRECURSION 遇到的问题

    在使用Sql Server的时候,当需要递归的时候很多时候就会想到使用CTE.但是当递归层数比较多,超过了100层,或者是一个递归死循环的时候.执行就会爆递归次数已到,最多100的错误. 当面对第一种 ...

  5. 两个同级div等高布局

    显示效果: css代码如下 .wrap{ overflow:hidden; } .left{ width:30%; background:#09C; } .right{ width:70%; back ...

  6. Vulkan Tutorial 11 Shader modules

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 与之前的图像API不同,Vulkan中的着色器代码必须以二进制字节码的格式使用,而不 ...

  7. 【解决】使用compass watch xxx.scss 失败

    原始日期:2016-01-25 16:49 在上一篇博客,我们终于安装好了compass,不过紧接着使用compass watch app.scss 结果失败,经过查询资料,是compass的版本问题 ...

  8. Java Web开发环境配置(JDK+Tomcat++IDEA 14)

    对于未接触过java web开发的大家而言,应该和我一样对java web编程开发比较迷茫,通过查一些资料,大致清楚了java web开发环境的一些基本配置,未做过相关编程的人员可以看一看,由于我刚接 ...

  9. final用法

    1.修饰类 如果一个类被定义为final类型,那么该类无法被其他类继承,该类中的所有方法都是final类型的,字段是否是final类型取决于字段自身的定义. 2.修饰方法 一个方法被定义为final类 ...

  10. 提高驾驶技术:用GAN去除(爱情)动作片中的马赛克和衣服

    同步自我的知乎专栏:https://zhuanlan.zhihu.com/p/27199954 作为一名久经片场的老司机,早就想写一些探讨驾驶技术的文章.这篇就介绍利用生成式对抗网络(GAN)的两个基 ...