ORM的好功能

时间:2008-09-08 18:37:42

标签: c# orm

我目前正在努力整合一个相当简单的ORM工具,作为客户端各种Web项目的框架。大多数项目都是内部的,不需要大量的并发性,所有这些都将违背SQL Server。我建议他们使用像SubSonic,NHibernate和许多其他开源项目这样的ORM工具,但出于可维护性和灵活性的原因,他们想要创建自定义的东西。所以我的问题是:我应该确保在这个ORM工具中包含哪些功能?顺便说一句,我将使用MyGeneration来完成代码生成模板。

10 个答案:

答案 0 :(得分:23)

为了所有神圣的人(以及女人和孩子)的爱,尽一切可能说服他们不要使用定制的O / RM解决方案。当有完美的开源轮子时,为什么人们想要重新发明轮子?!?!

答案 1 :(得分:5)

如果您的客户因为(真实的或想象的)对支持的看法对OSS不感兴趣,您是否考虑过任何高质量的商业第三方ORM,例如 LightSpeed 附带一个漂亮的GUI设计工具

LightSpeed ORM
(来源:mindscape.co.nz

Mindscape(销售LightSpeed的公司)是一家位于我居住地附近的新西兰公司,我在那里遇到了一些开发人员,我知道他们因拥有令人难以置信的客户支持而闻名。他们在您购买软件时会为您提供源代码,因此您可以随意调整它。

除非您必须您的客户愿意为您提供愚蠢的现金,否则您可能不希望自己推出自己的ORM。

答案 2 :(得分:3)

IMO编写自己的OR / M是您可能做出的最糟糕的设计决策之一。 “可维护性和灵活性”是完全不写自己的OR / M的原因。

请阅读See 25 Reasons Not To Write Your Own Object Relational Mapper,看看您的客户是否真的想支付构建NHibernate($ 7.6M)或SubSonic($ 150万)等费用的费用。因为,就像ChanChan上面说的那样,你最终会得到类似的东西。

答案 3 :(得分:2)

Davy Brion(NHibernate提交者)发布了一些帖子,由于某种原因,他们也被迫为客户编写自定义ORM。

他所涉及的一些事情是:

  • 将类映射到表
  • 开箱即用的CRUD功能
  • 保湿实体
  • 会话级缓存
  • 执行自定义查询

绝对值得一试,如果你必须走这条道路:Build Your Own Data Access Layer Series

答案 4 :(得分:1)

根据我的经验,你需要采用nHibernate风格,并且拥有它,以便在对象和数据库之间拥有某种地图。这允许您的对象具有一些难以在数据库中表示但在POCO中更容易表示的东西。

通过为您提供符合您的架构的类,生成让您开始,但如果您计划维护任何内容或测试任何内容,那么映射现在很难以获得乐趣。

Subsonic是一个很棒的模型,它的开源,如果你必须去世代,请在myGeneration中使用他们的模板来获得支持。

顺便说一句:我已经完成了你正在做的事情,我最终得到的东西与亚音速非常相似,现在建议我的客户采用亚音速源,并为自己分叉。 < / p>

答案 5 :(得分:1)

也许只是可能,你需要一些现有解决方案中尚不存在的“功能”。也许你还需要更简单的东西。亚马逊的1.5美元简直太过分了。 也许你想使用POCO。也许你想在3层场景中轻松使用这些东西。 也许你不想支持这个星球上的所有RDBMS,所以你可以为你的目标硬编码和优化代码。也许你想实现更智能的对象跟踪。也许现有的一些设计决定会让你疯狂......

我自己正在使用我自己和我开发的自定义orm,我很满意我做到了。地毯下没有隐藏的龙,没有惊喜的情景。我的工作确实完全符合我的要求,仅此而已,仅此而已。

答案 6 :(得分:1)

  • 二级缓存

    允许您在内存中维护实体实例

    • 自动脏检查

      允许您更新对象中的更改而不加载它。

    • 强大的查询语言

    • 强大的级联操作

    • 强大的主键生成器策略

      ORM框架将根据目标数据库获取最佳主键生成器策略

    • 支持复合元素

    • 支持活动

      onSave,onUpdate等

    • 良好的文档和参考书籍

    • 支持会话状态

的问候,

答案 7 :(得分:0)

没人提到它;但请跟LLBLGen一起去。您可以根据需要自定义模板,显然,您也可以在生成的类中编写自己的自定义代码。买吧。你永远不会回头,你会说“谢谢你丝滑!”当它始终如一地运作时。 (我没有写,但我喜欢它)。如果它不适合你,你也可以说“该死的你!”。但这不太可能,但我确实提供了它作为一种选择。

我注意到关于LLBLGen的唯一不好的事情就是支持动态数据库/服务器之间的切换。它不支持我喜欢的功能;即能够检测到您检索到的给定实体在您切换到的新数据库中“不存在”。但这是一种罕见的情况。

我建议使用LLBLGen,因为当我遇到它时,我正在编写自己的OR / M.永不回头。

答案 8 :(得分:0)

您作为顾问的工作(听起来就是这样)是利用您的专业知识为您的客户实施符合其愿望的解决方案,并以最低的成本和时间进行投资。

如果他们想要建立和销售OR / M.去镇上做一个。如果他们想要其他任何东西,请使用已经存在的东西来完成工作。

如果他们坚持花钱,就买一个现有的(我不会说出任何一个,但是有一些好的不是免费的)。

答案 9 :(得分:0)

尝试使用Devart LinqConnect - 所有LINQ to SQL功能以及对最流行的数据库服务器的广泛支持 - Oracle,MySQL,Postgre,SQL Server和SQLite。令人难以置信的可视化建模工具,先进的监控工具,高质量的支持 - 因此我在项目执行期间仅在三周内就学会了它。