Asp.net mvc 我真的需要ORM吗?

Asp.net mvc 我真的需要ORM吗?,asp.net-mvc,entity-framework,orm,ado.net,Asp.net Mvc,Entity Framework,Orm,Ado.net,我们即将开始开发一个中型ASP.NETMVC2Web站点。对于一个典型的页面,我们抓取数据并将其扔到网页上,即在数据发送到UI之前没有太多的预处理 我们现在正在决定是否使用ORM,如果是,选择哪一种。我们一直将EF2又称EF4(VS2010中的ASP.Net实体框架)视为一种可能性 然而,我认为在这种情况下,一个简单的解决方案可能只是使用数据表。原因是我们不打算在获取数据后移动数据或对其进行大量处理,因此我不确定将强类型对象作为DTO有多大价值。同样,通过这种方式,我们完全避免了映射,因此我认为

我们即将开始开发一个中型ASP.NETMVC2Web站点。对于一个典型的页面,我们抓取数据并将其扔到网页上,即在数据发送到UI之前没有太多的预处理

我们现在正在决定是否使用ORM,如果是,选择哪一种。我们一直将EF2又称EF4(VS2010中的ASP.Net实体框架)视为一种可能性

然而,我认为在这种情况下,一个简单的解决方案可能只是使用数据表。原因是我们不打算在获取数据后移动数据或对其进行大量处理,因此我不确定将强类型对象作为DTO有多大价值。同样,通过这种方式,我们完全避免了映射,因此我认为简化了代码并允许更快的开发

我应该提到预算是这个项目的一个问题,也是执行速度的问题。我们在任何地方都力求简单,以使预算更小,日程更短,性能更快


我们还没有完全决定这一点,但目前倾向于没有ORM。我们会接受并没有ORM的方法吗?还是ORM值得

如果你不打算练习全面的面向对象编程(我的意思是你应该对OOP有非常深刻的理解,而不仅仅是脱口而出原则和设计模式名称的能力),那么不,ORM是不值得的

只有当您的组织完全投入面向对象的应用程序设计,因此存在对象到关系模型映射的问题时,ORM才有用。如果您还没有完全进入OO,ORM将成为您的组织不需要的某种讨厌的路障


如果您的团队/组织的编程风格总是倾向于将业务逻辑保留在数据库中(例如,存储的过程),或者在编写对象和方法时或多或少地坚持功能性/过程性/静态方法,那么就不要使用ORM,而坚持使用ADO.NET。

ORM工具不是必需的

乔恩的建议是明智的,但我认为使用数据表并不理想

如果您使用的是ORM工具,那么对象模型要比成熟的OO域模型简单得多。此外,Linq2Sql和(例如)可以直接使用。允许在数据库更改时快速更改代码


您说您不会到处移动数据或大量处理数据,但在ORM对象中进行任何处理都比在数据表中容易得多。同样,如果应用程序发生更改并且需要更多处理,DataTable解决方案将变得脆弱。

听起来好像您只需要显示数据而不需要执行CRUD

我发现,当显示由不同表中的数据组成的列表时,ORM并不是最好的方法。最后加载大型ObjectGraph只是为了得到这个所需字段

在这方面,SQL语句要好得多。
我仍然会从DAL返回强类型对象的列表。这样,当DAL中的更改没有反映在其他层中时,您就更有可能出现编译时错误。

如果您已经有了所需的存储过程,那么ORM可能不会带来太多好处。如果不是的话,我的经验是,假设您熟悉Linq查询,那么使用LINQtoEntite比传统的存储过程/强类型数据集方法要快得多

如果您不担心映射到对象模型,那么Linq到SQL更容易使用。当然,您不需要使用完整的OO模型来获得生产力的好处

它不同意Malcolm关于必须返回图形的观点,如果ORM支持Linq,那么您可以使用投影返回一个平面结果,其中只包含您想要的数据,这增加了查询通常比相应的SQL更简单的优势,因为您可以使用关系而不是联接


在进行了切换并熟悉了这项技术之后,我认为这几乎不是不使用SQL存储过程的好理由,如果您确实需要的话,它们都支持使用SQL存储过程。不过,会有一个学习曲线,在这种情况下,这可能会让你觉得不值得。

我同意Joe R的建议-对于做出改变的速度和初始开发的速度,LINQ到SQL或亚音速将让你立即行动起来

如果您的应用程序真的这么简单,它只是直接映射到表的数据输出/数据输入,那么您是否考虑过查看


我还想指出Scott Guthrie对此的一点看法。

这在很大程度上取决于您对ORMs的熟悉程度

我个人认为,NHibernate是.NET世界中的ORM之王,它允许更快速的开发,因为一旦建立起来,您几乎可以忘记如何从数据库中获取数据

然而,它有一个陡峭的学习曲线,特别是如果你尝试以一种非黑客的方式做事(你应该这样做),所以如果你的团队在这里没有经验,时间紧迫,那么它可能不会削减它

Linq2SQL太简单了。不知道亚音速,但如果你打算使用ORM,它可能是快速开发和获得功能强大且复杂的东西之间的一个很好的平衡

但最终,作为一个团队,我认为您希望学习NHibernate。一旦您知道自己在做什么,它不需要花费时间来建立一个中小型项目,但功能非常强大。

可能会引起兴趣:在您的页面中,个人拥有强类型对象,可以简单地进行模拟,测试要比模拟数据集之类的东西容易得多。