关于c#:ORM的良好功能

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。从不回头。


推荐阅读

    开发linux命令工具?

    开发linux命令工具?,系统,工具,环境,状态,平台,设计,数据,电脑,中小企业,标

    linux命令测试客户端?

    linux命令测试客户端?,地址,系统,网络,工具,工作,分析,环境,命令,下行,资料,l

    linux命令创建项目组?

    linux命令创建项目组?,管理,密码,项目,命令,系统,位置,文件,用户组,用户,文

    linux命令联想工具?

    linux命令联想工具?,地址,工作,系统,工具,状态,标准,信息,命令,目录,左下角,L

    复制项目的linux命令?

    复制项目的linux命令?,系统,项目,文件,命令,目录,源文件,语法,选项,目标,功

    linux命令项目部署?

    linux命令项目部署?,项目,服务,环境,软件,系统,代理,管理,统一,做好,业务,怎

    linux命令工具怎么用?

    linux命令工具怎么用?,地址,系统,工作,单位,工具,密码,服务,命令,处分,基础,

    linux部署项目的命令?

    linux部署项目的命令?,项目,系统,设备,环境,工作,基础,传播,信息,标准,代码,L

    linux项目常用命令?

    linux项目常用命令?,工作,地址,系统,信息,管理,项目,命令,目录,标准,网络,lin

    linux项目更新命令?

    linux项目更新命令?,系统,信息,网络,地址,网站,通信,管理,时间,项目,命令,lin

    启动项目命令linux?

    启动项目命令linux?,工作,经理,产品,技术,地址,数字,系统,项目,命令,信息,怎

    linux命令行截图工具?

    linux命令行截图工具?,工具,电脑,软件,系统,截图,网站,工作,环境,暂停,命令,L

    linux命令工具教程?

    linux命令工具教程?,系统,工具,信息,基础,基础知识,代码,在线,地址,项目,服

    linux编译项目的命令?

    linux编译项目的命令?,系统,工作,地址,软件,工具,信息,代码,项目,命令,环境,l

    linux命令行渗透工具?

    linux命令行渗透工具?,系统,发行,网络,工具,信息,地址,管理,数据,工程,中国,

    linux卸载工具命令?

    linux卸载工具命令?,软件,系统,工具,名称,电脑,信息,命令,终端,程序,提示符,l

    linux命令流程图工具?

    linux命令流程图工具?,软件,工具,在线,网站,电脑,流程图,网络,名称,系统,首

    linux命令输入工具?

    linux命令输入工具?,系统,工具,工作,地址,信息,命令,时间,管理,环境,状态,怎

    安卓linux命令客户端?

    安卓linux命令客户端?,系统,软件,名字,设备,互动,服务,工具,基础,发展,代码,a

    项目linux常用命令?

    项目linux常用命令?,工作,地址,系统,管理,设备,信息,项目,命令,目录,标准,lin