首页 / 知识

关于c#:ORM的良好功能

2023-04-14 14:31:00

Good Features for an ORM

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


为了热爱所有圣洁的事物(包括妇女和儿童),请千方百计说服他们不要使用定制的O / RM解决方案。

为什么已经有完美的,开放源代码的轮子存在,人们为什么要重新发明轮子?!?!


如果您的客户对OSS不感兴趣,是因为(实际或想象中的)对支持的看法,那么您是否考虑过任何高质量的商业第三方ORM(例如LightSpeed),它都带有出色的GUI设计器工具

LightSpeed

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


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

他涵盖的一些内容是:

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

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


  • 二级缓存

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

    • 自动脏检查

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

    • 强大的查询语言

    • 强大的级联操作

    • 强大的主键生成器策略

      ORM框架将根据目标数据库

      选择最佳主键生成器策略

    • 对复合元素的支持

    • 对事件的支持

      onSave,onUpdate等

    • 好的文档和参考书

    • 支持对话状态

致谢,


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

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


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

通过为您提供符合您的模式的类,生成可以使您入门,但是如果您打算维护任何内容或进行任何测试,那么映射就很麻烦了。

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

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


尝试使用Devart LinqConnect-LINQ to SQL的所有功能以及对最受欢迎的数据库服务器(Oracle,MySQL,Postgre,SQL Server和SQLite)的广泛支持。难以置信的可视化建模工具,高级监视工具,高质量的支持-结果,我在项目执行过程中仅在三周内就学会了它。


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

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

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


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

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

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


项目工具客户端框架

最新内容

相关内容

猜你喜欢