2012-01-05 46 views
0

我正在寻找使企业ASP.net Web应用程序最可靠的方法。为企业级ASP.net MVC应用程序选择可靠的ORM

我发现ASP.net MVC成为我最喜欢的一个。
然后,我发现我需要选择构建数据库驱动应用程序的方法之一。所有的
首先,我了解......

Linq to SQL 

但是我发现,L2S不支持Oracle或MySQL和
微软将不再提供支持在将来的版本。 这是我想要确认的问题。

所以,我读到...

EntityFramework Repository and Unit of work 

然后,我喜欢它这么多。但不幸的是,我发现这个框架让我在考虑增量数据库构建功能时遇到困难。即使EntityFramework 4.3 Code First Migration Feature可以执行此操作,但我没有看到可以为脱机PC下载的任何安装程序。 而我不认为实体框架已经足够成熟。因为此EF迁移功能仍是Beta版本。所以API可以随时更改。

所以,最后我也读到了..

NHibernate 

因为,我认为这可能是我有机会使用信息库的,我从实体框架得到逻辑和工作模式的单位。

由于我是NHibernate的初中,我想知道我真的需要使用Spring.Net来制作MVC应用程序吗?为什么我想知道的是当我使用EntityFramework构建我的MVC应用程序时,我不需要像Spring.net那样的其他框架。

每一个建议将非常感激。

+0

一些比较这个问题将会因为像“哪个架构是更好”的问题被关闭是主观的,主观题不容易回答 - 每个人都有不同的经验和偏好,并且最好选择不同的框架。它甚至可以在评论中导致火焰战争。你的问题的唯一部分可以回答:是的,你可以在不使用Spring.NET的情况下使用NHibernate。 – 2012-01-05 08:40:00

+0

另请参阅:http://stackoverflow.com/questions/1377236/nhibernate-entity-framework-active-records-or-linq2sql/ – 2012-01-05 11:05:35

回答

2

你不需要使用Spring.NET来构建一个带有NHibernate的ASP.NET MVC应用程序。我认为NHibernate本身使用Spring.NET,但你可以随意使用任何你想要的。出于您列出的确切原因,我会避开Linq2SQL的新项目。

NHibernate比实体框架成熟得多,功能更多,但有一些陡峭的学习曲线。这是一个平衡的行为:更多的功能,更多的权力,但也更复杂。

正如您所说,EF功能在功能和API方面尚未完全稳定。对于增量数据库更改,我使用了不同的方法:首先使用EF代码在我的开发环境中不断重新生成(并重新填充)我的数据库。对于发行版,我创建了一个数据库迁移脚本来将生产数据库更新为新版本(手动或使用Redgate工具)。

+0

根据你的回答,你说你手动创建数据库迁移脚本来更新生产数据库。如果是这样,我认为你需要使用我想避免的大部分时间。 – 2012-01-05 08:46:51

+0

Redgate工具使得这项工作非常快速,只需比较2个数据库并生成必要的脚本。由于我通常在4-6周的发布周期,脚本并不那么大。 – tijmenvdk 2012-01-05 09:20:06

+0

但我认为,如果我转移到NHibernate,我不再需要使用像Redgate这样的第三方工具。我对么 ? – 2012-01-05 09:44:11

1

你可以使用nhibernate,它具有比其他orm更高的性能,并且可以根据需要进行定制。 这是一个很好的开源框架。

0

三:

  1. LINQ2SQL
  2. 实体框架
  3. NHibernate的

都是不错的选择。

如果您希望获得对数据的Linq查询的最佳支持,并且希望ORM尽可能轻量级化,那么您会喜欢第一个。

如果您想要增强Linq2SQL,请选择第二种。

如果您计划支持各种不同的数据库服务器,但您可以接受这样的事实,即linq提供程序正在开发中,因此您将不得不使用一些替代方法来获取/设置你的数据。

+0

我不同意选择NHibernate的标准。 Linq并不是选择ORM的唯一参数。 HQL也是一个功能强大的查询语言,即使它缺乏IDE的支持。我会说:“如果需要最大的灵活性,如果需要将数据库架构与业务逻辑高度分离,并且需要最大限度的可定制性和可扩展性(对于更陡的学习曲线的明显价格),则选择NHibernate。 ”。 – 2012-01-05 08:36:47

+0

Stefan,我同意“可扩展性”,nHibernate在这个领域发光。但是,“脱钩”,例如?与使用EF解耦相比,如何更好地与nHibernate解耦?此外,我认为为刚刚开始的人提及可扩展性等高级内容并不会触发任何铃声。另一方面,查询语言的表达式可能是您开始使用ORM冒险的一种方式。我们可以辩论HQL是否不是一个好的选择,对我来说不是因为它涉及编写字面查询。 – 2012-01-05 08:44:41

+0

@我不知道EF,但是使用NH,您可以灵活地将类映射到表。例如,您可以将许多类映射到单个表和单个类以将其映射到多个表中。您可以编写自己的用户类型等。先进的东西*应该*响铃,因为你*应该*知道你的应用程序将在该区域选择合适的库有多复杂。当你经过两年的发展后认识到你需要更先进的东西时,你不能只取代它。文字查询:这就是我所说的“IDE支持”。 – 2012-01-05 09:29:03