zoukankan      html  css  js  c++  java
  • DotNetCore跨平台~EFCore连接Mysql的方式

    回到目录

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

    感谢各位阅读!

    回到目录

  • 相关阅读:
    帮助应届生、年轻程序员快速成长的12个锦囊<转载>
    曾国藩教您:如何富过三代
    Mvc示例代码调试之二——调试示例讲解
    如何处理婚姻问题
    jQuery对象与dom对象相互转换
    Mvc示例代码调试之一----调试工具及设置(用firebug与vs联合调试)
    Mvc示例之三——用Filter进行简单身份验证
    沟通的艺术
    做bs开发需要学习哪些技术
    我所读过的技术书籍
  • 原文地址:https://www.cnblogs.com/lori/p/7154675.html
Copyright © 2011-2022 走看看