.NET 中的自定义 ORM

Posted

技术标签:

【中文标题】.NET 中的自定义 ORM【英文标题】:Custom ORM in .NET 【发布时间】:2010-08-26 01:51:50 【问题描述】:

我只想调用数据库上的存储过程并根据结果填充我的 C# 对象。我只需要一个映射文件和一个像 CodePlex 上的 Fasterflect 这样的快速反射工具来创建我自己的 ORM。

对于 C# 的这些功能是否有任何可用的 ORM,具有闪电般的快速性能? 或者我应该怎么做才能在映射数据库对象方面完成上述场景??

【问题讨论】:

【参考方案1】:

.NET ORM 有多种实现。

框架已经有两个,Linq to Sql和Entity Framework。您要针对哪种类型的数据库?

如果您正在寻找开源实现,请查看

NHibernate

除非您有足够的时间,否则我真的不会尝试自己构建一个!大多数 ORM 都有一个庞大的功能列表。

我使用了来自Mindscape 的名为LightSpeed 的产品。它支持多个 rdbms,具有出色的设计器、出色的 linq 功能并提供出色的性能。

【讨论】:

+1 同意;有像 NHibernate 或实体框架这样的现有 ORM 可以很好地调用存储过程;当已经有很棒的***时,不要重新创建*** NHibernate 和实体框架非常繁重但完整。有几个基准测试表明这些框架与 DataObject.NET 等其他可用框架相比性能较低 LightSpeed 很棒,该产品的性能部分正是我想要的,但我需要一个开源【参考方案2】:

如果您需要快速读取性能,请使用 EF6.x 并确保您使用 AsNoTracking 并首先设置一些附加值。这将使其超快......但是对于它支持仅读取的价格,因此没有更改检测和数据更新。这将使 EF6x 比默认行为快 5 倍,请参阅 this。

还要确保使用数据库视图、索引来为所有选择增加额外的速度。但最好的建议是:始终检查从 ORM 层发送到数据库的代码,进行预加载,使用 IQuery 投影,...

NHibernate 也是一个很好的工具。我将它用于我处理所有更改的域模型。

还有我的另一篇文章,其中提到了人们在不正确地使用 ORM(不使用 Eager-load 等)时最常见的问题 - link。此外,通过分析或急切加载,您可以避免 N+1 选择,通过使用视图,您可以获得额外的速度...

【讨论】:

以上是关于.NET 中的自定义 ORM的主要内容,如果未能解决你的问题,请参考以下文章

Kohana 3.2 中使用 ORM 模型(结果)的字段的自定义过滤器

Symfony2:奏鸣曲实体中的自定义标识符

Swift 中的自定义 Segue

ASP.NET C# 中的自定义控件

.net 中的自定义表格组件

写入 app.config .Net 中的自定义部分