用于.NET Core的ORM

尽管EF Core正努力提供视图和存储过程等基本数据库特性,但是开发人员也在寻求能满足他们数据访问需求的ORM工具。下面列出一些相对广为使用的ORM。

LLBLGen Pro Runtime Framework

LLBLGen Pro Runtime Framework是一种“可选”的ORM,它是与LLBLGen实体建模工具一并使用的。这里称其为“可选的”,是因为它也能和Entity Framework等其它ORM一起工作。

类似于Entity Framework,LLBLGen Pro Runtime Framework也是一种OOP风格的完备ORM(Full ORM)。但是它在几个方面上有所差异,首先是它更侧重于性能。尽管EF Core的性能显著高于经典的Entity Framework,但是两者依然明显地低于其它的ORM。LLBLGen Pro的作者Frans Bouma发起了一个性能比赛,意在比较各种.NET数据访问和ORM实现的速度。

LLBLGen Pro Runtime Framework也不同于EF/EF Core,它并非绑定于上下文(Context)的。每个实体无需维持一个打开的上下文,就可以追踪自身的改变,并在内存中操作对象图。该特性无疑会受到DBA的欢迎,因为无需维持打开的上下文,意味着不需要维持一个打开的数据库连接,否则需要操作数据库的连接池。

与大多数用于.NET Core的ORM一样,在LLBLGen Pro Runtime Framework的Core版本上存在一些限制。但这些限制主要局限于.NET Core本身的缺失特性。例如,TransactionScope目前尚不被SqlClient支持、很少一部分对象是可二进制序列化等。

Dapper

另一种是广为人知的微ORM(Micro-ORM)产品Dapper。Dapper常被认为是最快的ORM,几乎总是保持着.NET ORM基准测试的头名位置。

通常使用Dapper实现对原始SQL的调用并物化查询结果,因此它在.NET和.NET Core上的工作情况基本相同。Dapper不同于完备ORM,它并不提供任何SQL生成功能。虽然许多开发人员并不相信由ORM生成的SQL,但这还是会令Dapper在使用上要比其它ORM产品更为繁琐。

LINQ to DB

LINQ to DB称自己是“超出Dapper、Massive、PetaPoco等微ORM产品一步之遥”。它不具备一些在Entity Framework中使用会引发性能问题的特性,例如更改追踪。

LINQ to DB中的Join操作有些不同。在EF中,任何需要执行“Join”操作之处,事实上是作为子对象或集合(Collection)对待的。所生成的SQL自然会使用Join操作,但是当结果集被物化为对象后,SQL语句的执行就不再依赖于Join操作了。

LINQ to DB实际执行Join操作,具体实现为“Left Join”和“Inner Join”操作。如果使用EF解释LINQ,那么生成语句在语法虽然略显奇特,但更好地匹配了数据库的实际工作情况。

DevExpress XPO

eXpressPersistent Objects(XPO)是一种商业产品。Reddit用户“-GrapH-”对其如此评价:

我使用DevExpress XPO已有11年了。今年10月,它开始支持.NET Standard 2.0。尽管它是一个商业产品,但支持.NET Core的首个.NET测试版(v17.2.2)将对所有的用户免费使用。进一步更新尽管需要付费,但是其中包括了视觉设计工具和技术支持。虽然该ORM不同于EF,并且推出的时间更长(如果我没有记错的话,它的第一个版本是针对.NET 1.1发布的),但是其中基本包含了各种规模应用程序所需的所有特性。它的演示和教程提供于https://github.com/DevExpress/XpoNetCoreDemos。

你的选择是什么?

现有多种.NET Core可用的ORM。如果你已使用其中一种达数月时间,欢迎将你的认识反馈给我们。

译者注:在原文评论中,有人指出NHibernate 5和EntityLite也支持.NET Core 2.0。

原文:http://www.infoq.com/cn/news/2017/12/NetCore-ORMs


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

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

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

相关文章

Spring Boot之基于Dubbo和Seata的分布式事务解决方案

转载自 Spring Boot之基于Dubbo和Seata的分布式事务解决方案 1. 分布式事务初探 一般来说,目前市面上的数据库都支持本地事务,也就是在你的应用程序中,在一个数据库连接下的操作,可以很容易的实现事务的操作。但是目前&#xff…

Ocelot监控

网关的作用之一,就是有统一的数据出入口,基于这个功能,我们可以在网关上配置监控,从而把所有web服务的请求应答基本数据捕获并展显出来。 关于web的监控,一般的做法是采集数据并保存,然后通过图表的方式展示…

Spring Boot之基于Redis实现MyBatis查询缓存解决方案

转载自 Spring Boot之基于Redis实现MyBatis查询缓存解决方案 1. 前言 MyBatis是Java中常用的数据层ORM框架,笔者目前在实际的开发中,也在使用MyBatis。本文主要介绍了MyBatis的缓存策略、以及基于SpringBoot和Redis实现MyBatis的二级缓存的过程。实现本…

数据库架构演变概要

一.背景为了适应业务增长,数据库数据量快速增长,性能日趋下降,稳定性不佳的实际情况,急需架构逐步演变适应未来的业务发展。二.现状【稳定性】数据库为单点,没有高可用和稳定性方案。【数据量大】数据库目前…

面试请不要再问我Spring Cloud底层原理

转载自 面试请不要再问我Spring Cloud底层原理 概述 毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术。不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理,很多人可能并…

nginx配置前端反向代理

本地这里有两个端口: 8080:前端页面 80:后端接口 在nginx配置 listen 8888;server_name 127.0.0.1;location / {root html;proxy_pass http://127.0.0.1:8080;# try_files $uri $uri/ /index.php$is_args$args;index index.html…

Visual Studio 2017的第五个更新包扩展了调试工具

Visual Studio 2017近日收到了最新的完整更新包,版本号为15.5。跟随前几次更新的步伐,这次发布提供了一系列几乎会让所有用户从中受益的特性。此次发布的一个重点是IDE的性能,尤其是减少C#/Visual Basic项目的加载时间。在.NET Core项目中进行…

深港澳大湾区第三次.NET技术交流会圆满成功

2017年12月10日,一场以云、devops、微服务、容器是现在这个发展阶段的软件形态, 本次活动我们围绕这些话题介绍.NET生态下的发展本地社区活动,这次活动还得到如鹏网杨中科老师的大力支持开通网上直播,网上有229位参与活动&#xf…

基于消息中间件RabbitMQ实现简单的RPC服务

转载自 基于消息中间件RabbitMQ实现简单的RPC服务 RPC(Remote Procedure Call,远程过程调用),是一种计算机通信协议。对于两台机器而言,就是A服务器上的应用程序调用B服务器上的函数或者方法,由于不在同一个内存空间或机器上运行&#xff0c…

开源纯C#工控网关+组态软件(七)数据采集与归档

一、 引子在当前自动化、信息化、智能化的时代背景下,数据的作用日渐凸显。而工业发展到如今,科技含量和自动化水平均显著提高,但对数据的采集、利用才开始起步。对工业企业而言,数据采集日益受到重视,主要应用场景包…

实践出真知之Spring Cloud之基于Eureka、Ribbon、Feign的真实案例

转载自 实践出真知之Spring Cloud之基于Eureka、Ribbon、Feign的真实案例 Eureka是Spring Cloud Eureka的简称,是Netflix提供的组件之一。通过Eureka可以提供服务注册、发现、负载均衡、降级、熔断等功能。本篇主要介绍Eureka作为服务注册中心,以及实现…

从零开发一个laravel项目的增删改查、详情

环境要求: wampcomposer 创建laravel项目: composer create-project --prefer-dist laravel/laravel person快速完成person注册登录开发 1、migration php artisan make:migration create_people_table$table->increments(id);$table->string…

使用Api分析器与Windows兼容包来编写智能的跨平台.NET Core应用

本文翻译自Scott Hanselman博客:https://www.hanselman.com/blog/WritingSmarterCrossplatformNETCoreAppsWithTheAPIAnalyzerAndWindowsCompatibilityPack.aspx正文:这是最近这几周你应该知道的一对.Net Core界的优秀工具。我们在编写或者移植跨平台代码…

实验进行中:.NET WebAssembly支持

目前四大主流浏览器都默认支持WebAssembly,而.NET社区也在继续推动为.NET开发者提供相关能力,来将他们的代码编译成WebAssembly,然后在浏览器上运行。WebAssembly是一种二进制web格式,旨在以接近原生的性能运行不是用JavaScript语…

Js对象如何添加方法、查看Api

js万物皆对象,要带着观察对象的眼观去看待每一个函数、变量。 为什么要用到原型? Es6以前,js中没有如ooa编程当中的class,但是要用到类,怎么办呢,构造函数就应运而生,但是构造函数里面添加方法…

微软人工智能和对话平台--知识商城体验

前言微软最新发布 知识商城了!这是一个人工智能和对话平台应用的场景。他可以让开发者带着想法 出做天马行空的创造性工作!你只需要稍微动动手,如:拖拽板块,就可以做到极致对答、代码自动生成!想象一下&…

Spring @Import注解配置类方法内部调用没有注入属性值的坑

一、场景复现 application.yaml spring:application:name: config-testprofiles:active: devconfig:config-01:name: zhansancode: 001config-02:name: lisicode: 002导入配置类 Configuration Import(ImportConfig.class) public class Config {BeanConfigurationPropertie…

使用Xamarin开发手机聊天程序 -- 基础篇(大量图文讲解 step by step,附源码下载)

如果是.NET开发人员,想学习手机应用开发(Android和iOS),Xamarin 无疑是最好的选择,编写一次,即可发布到Android和iOS平台,真是利器中的利器啊!而且,Xamarin已经被微软收购…

Spring Boot 数据库连接池入门

转载自 芋道 Spring Boot 数据库连接池入门 本文在提供完整代码示例,可见 https://github.com/YunaiV/SpringBoot-Labs 的 lab-19 目录。 原创不易,给点个 Star 嘿,一起冲鸭! 1. 概述 在我们的项目中,数据库连接池基…

.net core 实现简单爬虫—抓取博客园的博文列表

一.介绍一个Http请求框架HttpCode.CoreHttpCode.Core 源自于HttpCode(传送门),不同的是 HttpCode.Core是基于.net standard 2.0实现的,移除了HttpCode与windows相耦合的api,且修改了异步实现,其余特性完全与…