什么是您使用的ORM框架的最佳功能

时间:2010-07-03 20:21:10

标签: .net database orm frameworks persistence

我想知道您使用的orm框架的最佳功能是什么以及您最常使用的功能是什么?

您选择使用框架的原因是什么?

我只是想比较它们,并想知道是否有任何提供优势。 (这一切都非常好用谷歌搜索,但你无法击败第一手用户体验!)

具体来说,我正在寻找.Net框架,但仍然对其他语言中的ORM /功能感到好奇。

提前致谢!

6 个答案:

答案 0 :(得分:4)

我们最近刚刚完成了实体框架和NHibernate之间的决策过程。虽然我最初的倾向是倾向于NHibernate,但鉴于微软在过去几年中实际坚持使用某项技术的记录并不是很出色(例如:Linq To SQL,死于版本1,或者更新的例子)如果MS决定放弃ASP.NET Ajax Library客户端模板,请检查this),我们仍决定使用Entity Framework。

我们选择它的原因如下:

  1. 我们是微软唯一的商店,因此它与我们现有的工具集很好地结合在一起。
  2. 我们喜欢它在Visual Studio 2010中具有内置的建模功能。
  3. 我们喜欢能够将数据库模式反向工程为实体数据模型的能力(这真的很酷)。
  4. 我们喜欢这样的事实:我们需要的所有东西都是开箱即用的,与NHibernate不同,我们不得不使用不同的工具进行可视化建模,映射文件有时会很难处理)它没有与Visual Studio很好地集成。
  5. 是否采用实体框架是正确的选择还有待观察。微软总是有机会推出另一个“Linq To SQL”并说,“嘿,我们扔掉实体框架,对不起,你应该选择NHibernate”。但是我们决定,自从VS 2010开始使用2.0以来,它至少有可能存在几年。

    所以尽管我们比实体框架更好地喜欢NHibernate的成功记录,但出于我上面提到的原因,我们选择了实体框架。

    我认为您只需要查看每个工具的优缺点,检查所有选项,并尝试做出最佳决策。

答案 1 :(得分:4)

  

我想知道您使用的orm框架的最佳功能是什么以及您最常使用的功能是什么?

我写了自己的ORM。功能包括:

  • 基于抽象表定义的每个表的机器生成代码

  • 一个库/框架,它作用于表定义和运行时数据,以实现如下的有用函数:

    • 创建表(或更新表定义)
    • CRUD
    • 触发存储过程,在更改表的内容时创建历史记录
    • 支持树状数据(使用嵌套集)
    • 将应用程序类型(C#类实例)转换为SQL数据记录,反之亦然
  

您选择使用框架的原因是什么?

我不想使用现有的ORM,因为我担心我迟早会发现它没有实现我想要的某些功能,然后我发现很难添加该功能。

我想使用ORM,因为我不想为每个表编写和维护代码。

答案 2 :(得分:3)

我使用Apache的empire-db

主要原因是我摆脱了XML或注释来定义数据库方案。我真的很讨厌将复杂性从编码转移到配置必须处理数万亿的xml配置文件,更糟糕的是 - 使用注释进行分布式配置。

答案 3 :(得分:3)

我写了Object Data Blocks来提供以下优秀功能

  • 使用.net类来描述db模式 - 没有映射文件
  • 为所有数据库访问创建存储过程
  • 类和查询都支持继承
  • 为DBA的
  • 自动部署或生成sql脚本

最好总结为对象持久化样式ORM。

答案 4 :(得分:2)

我编写了我的ORM,因为它可以在设备上使用.NET Compact Framework,也可以在没有重新编译的情况下使用完整的.NET Framework。

  

你选择的原因是什么?   你使用的框架?

  • 不需要从类继承指定的基类型或实现任何类型的接口。

  • 它支持.NET Compact Framework中未显示的嵌套事务范围。

  • 它允许我创建具有域模型的数据访问层,既可以在设备上使用,也可以在桌面或Web应用程序上使用,无需交叉编译或复制。

答案 5 :(得分:2)

  

我想知道最好的功能是什么   你使用的orm框架和什么   您发现自己使用最多的功能?

我认为Linq支持对我来说是杀手级的ORM功能。现在,针对数据库编写Linq查询需要ORM。 Linq在我的查询中给了我针对数据库的编译时静态类型检查,现在在代码和数据库不同步的某些情况下给出了编译器错误。我倾向于处理变化很大(敏捷)的数据库,并与开发人员团队合作,其中数据库架构更新可以来自任何团队成员。

  

你选择的原因是什么?   你使用的框架?

关于这个主题还有很多其他问题和答案:

NHibernate, Entity Framework, active records or linq2sql