ORM的良好功能

时间:2020-03-05 18:49:34  来源:igfitidea点击:

我目前正在研究一个相当简单的ORM工具,以作为客户端各种Web项目的框架。大多数项目是内部项目,不需要大量的并发性,所有项目都将不利于SQL Server。我建议他们使用ORM工具(例如SubSonic,NHibernate和其他许多开源项目),但是出于可维护性和灵活性的原因,他们希望创建自定义项。所以我的问题是:我应该确保在此ORM工具中包括哪些功能?顺便说一句,我将使用MyGeneration来执行代码生成模板。

解决方案

回答

根据我的经验,我们需要采用nHibernate样式,并具有这种样式,以便在对象和数据库之间建立某种映射。这使对象具有一些难以在数据库中表示但在POCO中更容易表示的东西。

通过为我们提供符合模式的类,Generation可以使我们入门,但是如果我们打算维护或者测试任何内容,则映射现在很麻烦,以后会很高兴。

Subsonic是一个很好的模型,如果我们必须进行下一代开发,则可以使用其开源代码,在myGeneration中使用其模板来获得成功。

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

回答

为了爱所有圣洁的事物(包括妇女和儿童),请千方百计说服他们不要使用定制的O / RM解决方案。当已经存在完美的,开放源代码的轮子时,为什么人们要重新发明轮子呢?!?!

回答

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

请阅读"查看不编写自己的对象关系映射器的25个理由",并查看客户是否真的愿意支付建造NHibernate(760万美元)或者SubSonic(150万美元)之类的费用。因为,就像上面的ChanChan所说的那样,我们最终会得到类似的结果。

回答

也许只是,我们非常需要现有解决方案中尚不存在的一些"功能"。也许我们还需要一些更简单的方法。 Subsonic的1.5美元简直太离谱了。
也许我们想使用POCO。也许我们想在3层方案中轻松使用这些东西。
也许我们不想支持这个星球上的所有RDBMS,所以我们可以仅针对目标进行硬编码和优化代码。也许我们想实现更智能的对象跟踪。也许由现有规范做出的一些设计决策使我们发疯……。

我本人正在使用由我本人和我开发的自定义orm,对此我感到满意。地毯下没有隐藏的龙,也没有令人惊讶的场景。我的orm完全按照我的意愿去做,仅此而已,仅此而已。

回答

如果客户由于对支持的(真实或者想象中的)看法而对OSS不感兴趣,那么我们是否考虑过任何带有优质GUI设计器工具的顶级商业第三方ORM,例如LightSpeed

LightSpeed ORM http://www.mindscape.co.nz/images/chrome/screendump.jpg

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

除非我们必须这样做,否则我们可能不希望自己滚动ORM,并且客户愿意为我们这样做提供愚蠢的现金。

回答

还没有人提到它。但请选择LLBLGen。我们可以根据需要自定义模板,并且显然也可以在生成的类中编写自己的自定义代码。买吧。我们将永远不会回头,并且我们会说:"谢谢柔滑!"当它始终表现出色时。 (我没有写,但我喜欢)。如果对我们没有效果,我们也可以说"该死的,真滑!"。但这不太可能,但是我确实提供了它作为选择。

关于LLBLGen,我注意到的唯一不好的事情就是对在数据库/服务器之间进行动态切换的支持。它不支持我想要的功能;也就是说,检测到我们检索到的给定实体不存在于我们已切换到的新数据库中的功能。但这是一种罕见的情况。

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

回答

NHibernate的提交人Davy Brion有很多帖子,由于某些原因,他们也被迫为客户编写自定义ORM。

他介绍的一些内容包括:

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

绝对值得一试,如果我们必须走这条路:构建自己的数据访问层系列

回答

我们作为顾问的工作(听起来就是本职)是要利用专业知识,以最小的成本和时间投资为客户实施适合其需求的解决方案。

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

如果他们坚持要花钱,那就买一个现成的(我不会透露任何名字,但是有一些不是免费的好东西)。

回答

  • 强大的查询语言
  • 强大的级联操作
  • 强大的主键生成器策略ORM框架将根据目标数据库选择最佳的主键生成器策略
  • 支持复合元素
  • 支持事件onSave,onUpdate等
  • 好的文档和参考书
  • 支持对话状态

问候,

回答

尝试使用Devart Linq将所有LINQ连接到SQL功能,并广泛支持最流行的数据库服务器Oracle,MySQL,Postgre,SQL Server和SQLite。难以置信的可视化建模工具,高级监视工具,高质量的支持,因此,我在项目执行过程中仅三个星期就学会了它。