iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >为ABP框架配置数据库
  • 859
分享到

为ABP框架配置数据库

2024-04-02 19:04:59 859人浏览 泡泡鱼
摘要

目录创建标准的 EFCore 数据库上下文连接字符串定义隔离的上下文多数据库支持和配置Freesql 配置服务在 abpBase.Database 中,通过 Nu

在 abpBase.Database 中,通过 Nuget 添加以下几个库:

版本都是 1.9.0-preview0917,你可以使用最新版本的。

Freesql									
FreeSql.Provider.Sqlite
FreeSql.Provider.SqlServer
FreeSql.Provider.Mysql

创建标准的 EFCore 数据库上下文

在 ABP 中,EFCore 上下文类需要继承 AbpDbContext<T>,整体编写方法跟继承 DbContext<T> 一致 ,接下来我们将一步步来讲解在 AbpBase 中如何添加 EFCore 功能。

连接字符串

ABP 中,可以在上下文类加上一个 ConnectionStringName 特性,然后在配置服务时,ABP 会自动为其配置连接字符串。

    [ConnectionStringName("Default")]
    public partial class DatabaseContext : AbpDbContext<DatabaseContext>

Default 是一个标识,你也可以填写其他字符串标识。

定义隔离的上下文

首先,我们在 AbpBase.Database 模块中,创建两个文件夹:

BaseData
ExtensionData

BaseData 目录用来存放基础表结构的上下文,ExtensionData 用来存放可能会拓展或者经常变动的表结构。

在 BaseData 中创建一个 AbpBaseDataContext 类,其内容如下:

using Microsoft.EntityFrameworkCore;
using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;

namespace AbpBase.Database
{
    /// <summary>
    /// 上下文
    /// <para>这部分用于定义和配置基础表的映射</para>
    /// </summary>
    [ConnectionStringName("Default")]
    public partial class AbpBaseDataContext : AbpDbContext<AbpBaseDataContext>
    {

        #region 定义 DbSet<T>

        #endregion


        public AbpBaseDataContext(DbContextOptions<AbpBaseDataContext> options)
    : base(options)
        {
        }

        /// <summary>
        /// 定义映射
        /// </summary>
        /// <param name="modelBuilder"></param>
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            #region 定义 映射

            #endregion

            OnModelCreatingPartial(modelBuilder);
        }

        partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
    }
}

在 ExtensionData 中也创建一个相同的 AbpBaseDataContext 类,其内容如下:

using Microsoft.EntityFrameworkCore;

namespace AbpBase.Database
{

    public partial class AbpBaseDataContext
    {
        #region 定义 DbSet<T>

        #endregion

        /// <summary>
        /// 定义映射
        /// </summary>
        /// <param name="modelBuilder"></param>
        partial void OnModelCreatingPartial(ModelBuilder modelBuilder)
        {

        }
    }
}

分部类,前者用于定义那些非常基础的,程序核心的实体(表)以及映射。而后者定义后续可能多次修改的,设计时感觉有设计余地的。

多数据库支持和配置

这里我们将对上下文进行配置和注入,使得程序能够支持多数据库。

在 AbpBase.Domain.Shared 项目中,创建一个枚举,其内容如下:

namespace AbpBase.Domain.Shared
{
    public enum AbpBaseDataType
    {
        Sqlite = 0,
        mysql = 1,
        Sqlserver = 2

        // 其他数据库
    }
}

再创建一个 WholeShared 类,其内容如下:

namespace AbpBase.Domain.Shared
{
    /// <summary>
    /// 全局共享内容
    /// </summary>
    public static class WholeShared
    {
        // 数据库连接属性可以自行在配置文件中定义,这里写固定的,只是为了演示

        /// <summary>
        /// 数据库连接字符串
        /// </summary>
        public static readonly string SqlConnectString = "";

        /// <summary>
        /// 要使用的数据库类型
        /// </summary>
        public static readonly AbpBaseDataType DataType = AbpBaseDataType.Sqlite;
    }
}

然后我们在 AbpBaseDatabaseModule 模块中的 ConfigureServices 函数里面添加依赖注入:

context.Services.AddAbpDbContext<AbpBaseDataContext>();

这里不需要配置数据库连接字符串,后面可以通过 ABP 的一些方法来配置。

配置上下文连接字符串

            string connectString = default;
            Configure<AbpDbConnectionOptions>(options =>
            {
                connectString = WholeShared.SqlConnectString;
                options.ConnectionStrings.Default = connectString;
            });

配置多数据库支持:

            FreeSql.DataType dataType = default;

            Configure<AbpDbContextOptions>(options =>
            {
                switch (WholeShared.DataType)
                {
                    case AbpBaseDataType.Sqlite:
                        options.UseSqlite<AbpBaseDataContext>(); dataType = FreeSql.DataType.Sqlite; break;
                    case AbpBaseDataType.Mysql:
                        options.UseMySQL<AbpBaseDataContext>(); dataType = FreeSql.DataType.MySql; break;
                    case AbpBaseDataType.Sqlserver:
                        options.UseSqlServer<AbpBaseDataContext>(); dataType = FreeSql.DataType.SqlServer; break;
                }
            });

这样就完成了对 EFCore 的多数据库配置了。

下面我们来使用类似的方法配置 Freesql。

Freesql 配置服务

首先,Freesql 里面有多种配置方式,例如 DbContext,读者可以到 Wiki 去学习 Freesql

https://GitHub.com/dotnetcore/FreeSql/wiki/%E5%85%A5%E9%97%A8

笔者这里使用的是 “非正规” 的设计方式,哈哈哈哈。

在 BaseData 目录中,创建一个 FreesqlContext 类,其内容如下:

using FreeSql.Internal;
using System;
using System.Collections.Generic;
using System.Text;

namespace AbpBase.Database
{
    /// <summary>
    /// Freesql 上下文
    /// </summary>
    public partial class FreesqlContext
    {
        public static IFreeSql FreeselInstance => Freesql_Instance;
        private static IFreeSql Freesql_Instance;

        public static void Init(string connectStr, FreeSql.DataType dataType = FreeSql.DataType.Sqlite)
        {
            Freesql_Instance = new FreeSql.FreeSqlBuilder()
                .UseNameConvert(NameConvertType.PascalCaseToUnderscore)
                .UseConnectionString(dataType, connectStr)

                //.UseAutoSyncStructure(true) // 自动同步实体结构到数据库,生产环境禁止使用!

                .Build();
            OnModelCreating(Freesql_Instance);
        }

        private static void OnModelCreating(IFreeSql freeSql)
        {


            OnModelCreatingPartial(freeSql);
        }
    }
}

ExtensionData 目录中,创建 FreesqlContext 类 如下:

using FreeSql;
using System;
using System.Collections.Generic;
using System.Text;

namespace AbpBase.Database
{
    public partial class FreesqlContext
    {
        private static void OnModelCreatingPartial(IFreeSql freeSql)
        {
            var modelBuilder = freeSql.CodeFirst;

            SyncStruct(modelBuilder);

        }

        /// <summary>
        /// 同步结构到数据中
        /// </summary>
        /// <param name="codeFirst"></param>
        private static void SyncStruct(ICodeFirst codeFirst)
        {
            //  codeFirst.SyncStructure(typeof(user));
        }
    }
}

然后在 AbpBaseDatabaseModule 的 ConfigureServices 函数中添加注入服务:

            FreesqlContext.Init(connectString, dataType);
            context.Services.AddSingleton(typeof(IFreeSql), FreesqlContext.FreeselInstance);
            context.Services.AddTransient(typeof(FreesqlContext), typeof(FreesqlContext));

通过以上步骤,我们的 ABP 就可以支持多数据库了,EFCore + Freesql,并且将将表分级隔离维护。

到此这篇关于为ABP框架配置数据库的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: 为ABP框架配置数据库

本文链接: https://www.lsjlt.com/news/140191.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 为ABP框架配置数据库
    目录创建标准的 EFCore 数据库上下文连接字符串定义隔离的上下文多数据库支持和配置Freesql 配置服务在 AbpBase.Database 中,通过 Nu...
    99+
    2024-04-02
  • 怎么为ABP框架配置数据库
    本篇内容主要讲解“怎么为ABP框架配置数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么为ABP框架配置数据库”吧!在 AbpBase.Database 中,通过 Nu...
    99+
    2023-06-29
  • 配置ABP框架使用对象映射
    目录DTO和实体实体DTO麻烦的映射AutoMapper 集成IObjectMapper/ObjectMapper对象拓展DTO和实体 实体 实体是领域驱动设计(Domain Dri...
    99+
    2024-04-02
  • 如何配置ABP框架使用对象映射
    小编给大家分享一下如何配置ABP框架使用对象映射,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!DTO和实体实体实体是领域驱动设计(Domain Driven De...
    99+
    2023-06-29
  • ssm框架数据库连接怎么配置
    在SSM(Spring+SpringMVC+MyBatis)框架中,配置数据库连接主要是在MyBatis的配置文件中进行。以下是配置...
    99+
    2024-04-02
  • Python框架之Django的数据库配置问题
    准备开始python的环境,用django框架其默认的数据库是sqlite3 ,要改用mysql来存储数据在执行migrate的时候出现问题(错误见末尾):Unhandled exception in th...
    99+
    2024-04-02
  • 基于ABP框架实现数据字典开发
    在业务型的系统开发中,我们需要维护各种个样的类型,比如客户类型、客户行业、商品类型等等,这些类型往往信息量不多,并且相似度极高,如果采用一类型一表去设计,将会造成极大的工作量,通过将...
    99+
    2024-04-02
  • 为ABP框架添加基础集成服务
    目录定义一个特性标记全局统一消息格式Http 状态码常用的请求结果响应模型全局异常拦截器先说明一下ApiResponseModel 是抽象类跨域请求配置 API 服务统一 API 模...
    99+
    2024-04-02
  • ASP.NetCore基于ABP架构配置ToJson序列化
    一、 前言 我们采用ABP架构用MVC Controller或Web API返回给前端结果ToJson序列化后得到的属性命名都是采用js的驼峰格式,即首字母小写,后面单词首字母大写的...
    99+
    2024-04-02
  • Android 架构之数据库框架搭建
    目录1、先创建对应相关操作的注解1.1 bTable 标识表 1.2 DbPrimaryKey 标识主键 1.3 DbFiled 标识成员属性 2、创建对应表操作...
    99+
    2024-04-02
  • Gorm—Go语言数据库框架
    文章目录 一、GORM简介1、什么是Gorm?2、为什么选择GORM?3、如何使用GORM?4、约定大于配置大于编码GORM 默认使用ID作为表的主键GORM 默认使用结构体名的 snake case 复数作为表名临时指定表名gor...
    99+
    2023-08-18
    gorm框架 数据库 mysql
  • Android 架构之数据库框架升级
    目录1、备份原数据库File文件2、数据库升级XML编写 updateXml.xml3、创建XML解析器 3.1 对应工具类 DomUtils.class 3.2 对应XM...
    99+
    2024-04-02
  • PHP函数的数据库ORM框架
    PHP作为一种优秀的编程语言,应用广泛,其中,数据库ORM框架是一种非常重要的技术。在PHP中,ORM框架可以让开发人员把与数据库的操作封装成函数的形式,从而减轻开发人员的负担,提高开发效率。MySQL是PHP中常见的数据库,而在MySQL...
    99+
    2023-05-19
    数据库 ORM框架 PHP函数
  • python数据库框架有哪些
    Python 数据库框架有很多,以下是几个常用的:1、Django ORMDjango 是一个流行的 Python Web 框架,提...
    99+
    2023-05-13
    python数据库框架 python
  • 为ABP框架增加日志组件与依赖注入服务
    目录自动依赖注入添加日志依赖添加日志功能依赖注入自动依赖注入 在 AbpBase.Web 的 AbpBaseWebModule 中,添加一个函...
    99+
    2024-04-02
  • 为不同数据库管理系统配置PHP数据库连接
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-21
  • application.yml数据库配置
    application.yml数据库配置 1.配置代码 server: port: 8001#spring的配置spring: datasource: type: com.alibaba.d...
    99+
    2023-08-31
    数据库 mysql java
  • PHP 数据库操作与ORM 框架
    php中操作数据库的方法有两种:低级pdo api和简化操作的orm框架。pdo允许直接与数据库交互,通过连接、查询和获取结果的步骤实现。orm框架(如doctrine)将数据库表映射为...
    99+
    2024-04-30
    php orm mysql
  • 配置文件加密了数据库配置信息为什么Spring Boot仍能连接数据库
    这篇“配置文件加密了数据库配置信息为什么Spring Boot仍能连接数据库”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“配...
    99+
    2023-06-27
  • Laravel框架03:DB类操作数据库
    Laravel框架03:DB类操作数据库 一、概述二、数据表的创建与配置三、增删改操作1. 增加信息2. 修改数据3. 删除数据 四、查询操作1. 取出基本数据2. 取出单行数据3. 获取...
    99+
    2023-09-01
    数据库 laravel php
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作