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

用于.NET Core的ORM相关推荐

  1. [翻译]用于.NET Core的Windows窗体设计器发布

    本文由微信公众号<开发者精选资讯>翻译首发,转载请注明来源 今天我们很高兴地宣布,.NET Core 项目的 Windows 窗体设计器现在可以在 Visual Studio 2019 1 ...

  2. dbcontext mysql_九、.net core用orm继承DbContext(数据库上下文)方式操作数据库

    一.创建一个DataContext普通类继承DbContext 安装程序集:Pomelo.EntityFrameworkCore.MySql 二.配置连接字符串(MySql/SqlServer都可以) ...

  3. sqlsugar对mysql效率高_基于.Net Core 2.0 + SqlSugar ORM + MySql快速实现网站开发

    .Net Core 2.0 (以下简称Core)正式版已经发布有一段时间了, 博主也第一时间尝鲜了, 相比Core 1.0和1.1类库支持方面提高了不少, 开发起来也方便快捷很多了. 废话不多说了, ...

  4. 使用Windows兼容包简化向.NET Core的迁移

    从.NET迁移到.NET Core的一个主要原因,在于后者具备在Linux上运行的能力.但是对于大型企业应用,不可能实现一步迁移到位.由此,Microsoft推荐采用一种逐步迁移做法: \\ 第一步, ...

  5. 开源推荐:.Net Core3.1 + EF Core + LayUI 封装的MVC版后台管理系统

    ASP.NET Core是一个由微软创建的,用于构建Web应用程序,API,微服务的Web框架.它使用常见的模式,例如MVC(模型-视图-控制器),依赖注入,和一个由中间件构成它基于Apache 2. ...

  6. Github上优秀的.NET Core开源项目的集合

    内容包括:库.工具.框架.模板引擎.身份认证.数据库.ORM框架.图片处理.文本处理.机器学习.日志.代码分析.教程等. Github地址:https://github.com/GeekPowerFe ...

  7. 区块链毕业_基于.NET Core的在线音乐系统的设计与实现

    摘要 市场调研发现,移动互联网的高速发展和4G网络的全面普及,高速移动网络下提供单一功能的在线音乐服务已经无法满足用户日益增长的需求,侧重互动社交服务的音乐类平台的市场占有率.用户访问量和用户粘度等均 ...

  8. .NET-4.ORM 常见框架EFcorn、Dapper、SqlSugar、FreeSql 和ADO.NET

    ORM 常见框架 前言 什么是ORM EF Core学习与深入 一.了解 EF Core 1.DbContext 2.数据注释.Fluent API学习 二.简单的案例使用1(推荐参考最佳) 三.简单 ...

  9. C#常用的几个ORM框架及简单对比

    ORM => 对象关系映射(英语:Object Relational Mapping)对于O/R,即 Object(对象)和 Relational(关系型数据),表示必须同时使用面向对象和关系型 ...

最新文章

  1. 安装网页图形界面管理Linux
  2. 【POJ】【2449】Remmarguts' Date
  3. [转贴]ASP优化之显示数据查询内容
  4. Tracer Druid 记录sql 以及参数
  5. VTK:图片之ImageDilateErode3D
  6. 基于mysql实现的网站_[源码和文档分享]基于JavaScript和MySQL的文化平台网站的设计与实现...
  7. [翻译]现代Linux系统上的栈溢出攻击【转】
  8. linux 中断和进程 传递,Linux内核之进程上下文和中断上下文的区别
  9. 基于docker使用jenkins集成sonar
  10. Linux 用户态与内核态的交互——netlink 篇
  11. 想提高运维效率,那就把MySQL数据库部署到Kubernetes 集群中
  12. android 多平台发布,内容多平台发布
  13. Surface Book 3现身3DMark:10nm架构升级
  14. Python菜鸟入门:day12编程学习
  15. FreeCAD源码分析:FEM模块
  16. 一键开启macOS HiDPI
  17. 掉队于云计算市场是甲骨文裁员的最大原因
  18. GTK槽回调函数,组件颜色,布局控件
  19. spyder顺眼配色方案记录
  20. h264 Profile-level-id解析

热门文章

  1. 7z压缩文档的powershell示例
  2. ISE14.7兼容性问题集锦
  3. context:annotation-config/,mvc:annotation-driven/和context:component-scan之间的关系
  4. Idea maven项目不能新建package和class的解决
  5. Nginx+Tomcat动静态资源分离
  6. iOS工程中的info.plist文件的完整研究
  7. nginx对websocket的支持及uliweb chatroom的测试
  8. grep -A :显示匹配行和之后的几行
  9. 高效的动态URL限流实现
  10. 使用 dotnet-outdated 维护项目 nuget 包版本