最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

用于.NET Core 的 ORM

  • 2017-12-07
  • 本文字数:1430 字

    阅读完需:约 5 分钟

尽管 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。

查看英文原文: ORMs for .NET Core

2017-12-07 18:003145
用户头像

发布了 391 篇内容, 共 126.9 次阅读, 收获喜欢 256 次。

关注

评论 1 条评论

发布
用户头像
Dapper or linq2db may be the better choice beside EF core
2019-05-30 12:03
回复
没有更多了
发现更多内容

Spark必读!总有一些Spark知识点你需要知道

Qunar技术沙龙

spark hdfs mapreduce Web UI 数据倾斜

【墨天轮专访第二期】巨杉数据库萧少聪:重视企业长期需求,打造中国的世界级产品

墨天轮

数据库 人物访谈 国产数据库 巨杉数据库

阿里P8大牛终于整理完了564页大话java性能优化神仙文档

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

堡垒机和防火墙的三大区别分析-行云管家

行云管家

网络安全 防火墙 信息安全 数据安全 堡垒机

保姆级教程,小白也能2周搞定3个月的Web开发任务!

博文视点Broadview

一文为你介绍ServiceComb Service-Center三大高性能优化点

华为云开发者联盟

开源 微服务 注册中心 Service-Center

字节再次出圈!GitHub上爆火一星期的算法刷题手册竟出自这人之手

Java~~~

Java 架构 面试 算法 数据结构与算法

终于有人把操作系统,CPU,基础知识,网络一次讲清楚了,绝绝子

Java~~~

Java 架构 面试 TCP 网络

Alibaba新产!Spring+SpringBoot+SpringCloud全家桶进阶小册

Java~~~

Java spring 架构 面试 Spring Cloud

新生代农民工的十八般武艺,你都了解吗

华为云开发者联盟

DevOps 云原生 编程语言 编程规范 新生代农民工

深层剖析鸿蒙轻内核M核的动态内存如何支持多段非连续性内存

华为云开发者联盟

鸿蒙 内存 结构体 OpenHarmony 动态内容

Go- map的定义

HelloBug

Go 语言 map的定义

常见内存泄漏引起原因

金陵老街

云小课|想实现资源全自动备份?看完这篇秘籍,不再蕉绿~

华为云开发者联盟

云备份 自动备份 备份策略

带你读AI论文丨LaneNet基于实体分割的端到端车道线检测

华为云开发者联盟

端到端 网络模型 车道线 实体分割 LanNet

基于 Formily 的表单设计器实现原理分析 ​

全象云低代码

JavaScript 低代码开发 表单设计

阿里P8大牛耗费三年整理的:Java架构之完美设计实战PDF

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

Shopee物流业务核心数据库架构演变——权衡取舍的艺术

Shopee技术团队

架构 #数据库 #物流 #供应链 #Shopee

故事篇:数据库架构演变之路

阿Q说代码

主从复制 读写分离 集群部署 8月日更 垂直拆分

Go- map的使用

HelloBug

Go 语言 map的使用

金九银十给我疯狂内卷!GitHub再现星标86K面试手册,37K!妥妥的

Java~~~

Java 架构 面试 算法 JVM

阿里内部推出Spring响应式微服务Boot2Cloud文档

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

疫情小区离你有多远,百度地图告诉你

百度开发者中心

最佳实践 百度地图

膜拜!阿里内部都在强力进阶学习springboot实战派文档

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

惊!阿里大佬珍之若宝的最强高并发pdf,竟然被上传GitHub开源

Java 编程 架构 面试 程序人生

超实用?HUAWEI高工总结出15W字的图解计算机操作系统指南手册

Java~~~

Java 架构 面试 TCP 网络

apipost使用脚本发送一个接口请求

与风逐梦

后端 开发工具 接口测试

面试侃集合之SynchronousQueue非公平模式篇

码农参上

非公平锁 SynchronousQueue 8月日更

eKuiper 联手 OpenYurt,解决物联网场景下边缘流数据处理难题

EMQ映云科技

云计算 阿里云 物联网 IoT #Kubernetes#

今天我们来谈谈Golang的同步等待组

Regan Yue

Go 语言 8月日更 同步等待组

常用正则表达式最强汇总(含Python代码举例讲解+爬虫实战)

Python研究者

8月日更

用于.NET Core的ORM_.NET_Jonathan Allen_InfoQ精选文章