【Entity Framework】聊一聊EF如何使用数据库函数

news2024/9/20 2:39:03

【Entity Framework】聊一聊EF如何使用数据库函数

文章目录

  • 【Entity Framework】聊一聊EF如何使用数据库函数
    • 一、数据库函数的类型
    • 二、内置函数与用户定义的函数
    • 四、聚合函数、标量函数和表值函数
    • 五、Niladic函数
    • 六、EF Core 中的数据库函数映射
      • 6.1 内置函数映射
      • 6.2 EF.Functions 映射
      • 6.3 用户定义的函数映射

在这里插入图片描述

数据库函数是C#方法数据库等效项。数据库函数可以使用零个或更多个参数调用,它会根据参数值计算结果。大多数使用SQL进行查询的数据库都支持数据库函数。因此,EF Core查询转换生成的SQL也允许调用数据库函数。在EF Core种,C#方法不必严格地转换为数据库函数。

  • C#方法可能没有等效的数据库函数。
    • String.IsNullOrEmpty方法会转换为 null 检查和与数据库中空字符串的比较,而不会转换为一个函数。
    • String.Equals(String,StringComparison)方法没有数据库等效项,因为在数据库中表示或模拟字符串比较并非易事。
  • 数据库函数可能没有等效的C#方法。C#种的??运算符没有任何方法,它会转换为数据库种的COALESCE函数。

一、数据库函数的类型

EF Core SQL 生成支持可在数据库中使用的部分函数。 此限制源自采用给定数据库函数的 LINQ 表示查询的能力。 而且,每个数据库对数据库函数的支持各异,因此 EF Core 提供了一个通用子集。 数据库提供程序可免费将 EF Core SQL 生成扩展为支持更多的模式。 下面是 EF Core 支持并唯一标识的数据库函数类型。 这些条目也有助于了解哪些转换是 EF Core 提供程序内置的。

二、内置函数与用户定义的函数

内置函数是数据库中预定义的,而用户定义的函数是由数据库用户显式定义的。 EF Core 将查询转换为使用数据库函数时,它使用内置函数来确保该函数在数据库中始终可用。 在某些数据库中,需要了解内置函数的特征,才能正确生成 SQL。 例如 SqlServer 要求使用架构限定的名称调用各个用户定义的函数。 但 SqlServer 中的内置函数没有架构。 PostgreSQL 使用 public 架构定义内置函数,但可使用架构限定的名称调用它们。

四、聚合函数、标量函数和表值函数

  • 标量函数将标量值(如整数或字符串)用作参数,并返回标量值作为结果。 可在 SQL 中任意可以传递标量值的地方使用标量函数。
  • 聚合函数将一系列的标量值用作参数,并返回标量值作为结果。 聚合函数应用于整个查询结果集或应用 GROUP BY 运算符所生成的一组值。
  • 表值函数将标量值用作参数,并返回一系列的行作为结果。 表值函数用作 FROM 子句中的表源。

五、Niladic函数

Niladic 函数是特殊的数据库函数,没有任何参数,并且不得使用括号调用。 它们类似于 C# 实例上的属性/字段访问。 Niladic 函数不同于无参数函数,因为后者需要使用空白括号。 始终需要使用括号的数据库函数没有特殊的名称。 另外一部分基于参数计数的数据库函数是可变参数函数。 可变参数函数可以采用不同的参数数量进行调用。

六、EF Core 中的数据库函数映射

EF Core 支持三种不同的方式,来实现 C# 函数和数据库函数之间的映射。

6.1 内置函数映射

默认情况下,EF Core 提供程序通过基元类型为各种内置函数提供映射。 例如,在 SqlServer 中,String.ToLower()会转换为 LOWER。 用户可以通过此功能无缝地使用 LINQ 编写查询。 通常,我们提供的数据库转换生成的结果要与客户端的 C# 函数所生成的内容相同。 为实现此目的,有时实际的转换可能比数据库函数更为复杂。 在某些情况下,我们也会提供最适当的转换,而不是提供匹配的 C# 语义。 同样的功能也可用于为某些 C# 成员访问提供通用的转换。 例如,在 SqlServer 中,String.Length 会转换为 LEN。 除了提供程序外,插件编写器也可以添加更多的转换。 当插件添加对将更多类型作为基元类型的支持,并想要通过这些类型转换方法时,这种扩展性非常有用。

6.2 EF.Functions 映射

由于并非所有数据库函数都有等效的 C# 函数,因此 EF Core 提供程序提供了特殊的 C# 方法来调用某些数据库函数。 这些方法通过 EF.Functions 定义为扩展方法来用于 LINQ 查询中。 这些方法是特定于提供程序的,因为它们与特定数据库函数密切相关。 因此,适用于某个提供程序的方法很可能不适用于任何其他提供程序。 此外,由于这些方法旨在调用所转换查询中的数据库函数,因此尝试在客户端上计算这些方法会引发异常。

6.3 用户定义的函数映射

除了 EF Core 提供程序提供的映射以外,用户还可以定义自定义映射。 用户定义的映射会根据用户需求扩展查询转换。 当数据库中有用户想要从 LINQ 查询调用的用户定义的函数时,此功能非常有用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1613014.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【iOS开发】(四)react Native第三方组件五个20240419-20

react native 外的 第三方组件 目录标题 react native 外的 第三方组件(一)与rn核心组件的使用步骤区别:(二)第三方组件概览1 WebView2 Picker3 Swiper4 AsyncStorage5 Geolocation6 Camera (三)详细学习1 WebViewCoco…

ROS1快速入门学习笔记 - 01Linux基础

目录 一、Linux极简基础 二、C与Python极简基础 1. for循环 2. while循环 3. 面向对象 一、Linux极简基础 终端快捷键:ctrlaltt 命令行的操作方式 查看当前终端所在路径:pwd切换路径cd;例如cd /home/ 进入home文件夹;cd …

Oracle Hint 语法详解

什么是Hint Hint 是 Oracle 提供的一种 SQL 语法,它允许用户在 SQL 语句中插入相关的语法,从而影响 SQL 的执行方式。 因为 Hint 的特殊作用,所以对于开发人员不应该在代码中使用它,Hint 更像是 Oracle 提供给 DBA 用来分析诊断问…

2024数学建模时间汇总与竞赛攻略

目录 2024数学建模汇总(时间、报名费、获奖率、竞赛级别、是否可跨校) 中国高校大数据挑战赛 “华数杯”国际大学生数学建模竞赛 美国大学生数学建模竞赛(美赛) 数学中国(认证杯)数学建模网络挑战赛 …

从国九条的颁布简单看待未来的因子轮动

上周4月12日《关于加强监管防范风险推动资本市场高质量发展的若干意见》又称国九条出台后,除了本周五中东局势对大盘的影响,本周一波三折的行情很大程度上都是围绕着国九条展开的。一个很有意思的现象是前两次国九条发布后,市场都诞生了波澜壮…

【Linux开发 第八篇】定时任务

定时任务 crond任务调度at定时任务 crond任务调度 任务调度: 是指系统在某个时间执行特定的命令或程序 任务调度分类: 系统工作:有些重要的工作必须周而复始地执行,如病毒扫描等 个别用户工作:个别用户可能希望执行某…

107页 | 企业数字化转型规划设计(免费下载)

【1】关注本公众号,转发当前文章到微信朋友圈 【2】私信发送 【企业数字化转型规划设计】 【3】获取本方案PDF下载链接,直接下载即可。 如需下载本方案PPT原格式,请加入微信扫描以下方案驿站知识星球,获取上万份PPT解决方案&…

JAVA-服务器搭建-创建web后端项目

首先打开IDEA 点击新建项目 写好名称-模板选择 Web应用程序 -语言选择 Java 构建系统选择 Maven 然后点击下一步 选择版本-选择依赖项 Web Profile 点击创建 点击当前文件-选择编辑配置 选择左上角的加号-选择Tomcat服务器-选择本地 点击配置-选择到Tomcat目录-点击确定 起个…

Postman之安装

Postman工具之介绍与安装 Postman是什么?Postman有几种安装方式? Postman是什么? postman是一款http客户端的模拟器,它可以模拟发出各种各样的网络请求,用于接口测试。 Postman有几种安装方式? 两种&…

【数学建模】优劣解距离法Topsis模型(含MATLAB代码)

TOPSIS法,全称 Technique for Order Preference by Similarity to an Ideal Solution,是由C.L.Hwang和K.Yoon于1981年首次提出的 。这是一种多目标决策分析中常用的有效方法,也被称作优劣解距离法 。 TOPSIS法的基本原理是通过检测评价对象与…

Abaqus python二次开发2-扭转弹簧刚度计算

Abaqus python二次开发2-扭转弹簧刚度计算 1、定义弹簧参数2、绘制弹簧2.1、绘制弹簧截面2.12、绘制弹簧实体part(螺旋旋转截面) 3、设置材料、截面属性、并赋给弹簧(set)4、创建组件的坐标系、参考点和instance(弹簧&…

政安晨:【Keras机器学习示例演绎】(五)—— 利用视觉变换器进行物体检测

目录 导言 导入和设置 准备数据集 实施多层感知器(MLP) 实施补丁创建层 显示输入图像的补丁 实施补丁编码层 构建 ViT 模型 运行实验 评估模型 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与…

4.9 启动系统任务❤❤❤

有一些特殊的任务需要在系统启动时执行,例如配置文件加载、数据库初始化等操作。 Spring Boot对此提供了两种解决方案:CommandLineRunner和ApplicationRunner。 CommandLineRunner和ApplicationRunner基本一致,差别主要体现在参数上。 1. Co…

【Linux】在centos快速搭建K8S1.18集群

使用 kubeadm 创建集群帮助文档 如果您需要以下几点,该工具是很好的选择:kubeadm 一种简单的方法,让你尝试 Kubernetes,可能是第一次。现有用户自动设置群集并测试其应用程序的一种方式。其他生态系统和/或安装程序工具中的构建…

sublime text的json快捷键

系统 macos 配置 sublime Text->Settings->Key Bindings 效果 可以看到,按:shiftcommandp,会出现快捷键窗口,打pretty,会出现Format JSON,最右侧显示⌘J,说明只需要macos的⌘和J同时按…

目标检测YOLO数据集的三种格式及转换

目标检测YOLO数据集的三种格式 在目标检测领域,YOLO(You Only Look Once)算法是一个流行的选择。为了训练和测试YOLO模型,需要将数据集格式化为YOLO可以识别的格式。以下是三种常见的YOLO数据集格式及其特点和转换方法。 1. YOL…

https协议的加密方式详解

各位大佬能多多点赞关注评论收藏,球球各位大佬们了!! ! 目录 1.为什么要加密? 2.如何加密 1.密钥(yue,第四声) 2.对称加密 3.非对称加密 4.公证机构 3.总结 1.为什么要加密?…

【机器学习】朴素贝叶斯解决实际问题

之前写过这样一道题: 现在换成使用朴素贝叶斯解决这个问题 首先先了解一下朴素贝叶斯 这是之前课本里的笔记记录: 【机器学习笔记】朴素贝叶斯(从先验分布到后验分布)-CSDN博客 简单的讲解一下这道题需要的知识点 朴素贝叶斯是…

JVM-垃圾收集算法

前言 在 Java 中,垃圾收集(Garbage Collection)是一种自动管理内存的机制,它负责在运行时识别和释放不再被程序使用的内存,从而避免内存泄漏和悬空引用问题。本篇文章将介绍三种常见的垃圾收集算法。 标记-清除&…

11.接口自动化学习-Yaml学习

1.配置文件作用 配置文件项目角度: (1)现成的应用–第三方组件 mysql–数据库–my.conf tomcat–web服务器–server.xml 修改:连接数/端口 redis–缓存服务器–redis.conf 修改配置 jemeter–压测工具–jemeter.properties–修改…