也许还有其他的东西? 我已经在使用nHibernate,但偶尔会遇到一个懒惰的初始化代理对象实际上不会初始化的问题。我正在考虑尝试其他的东西。该网站拥有用户帐户,用户帖子和照片,并将这些内容过滤为特定位置名称和标题/说明匹配。更不用说投票,评级和标记作为最爱。所有这些都会导致不同数量的数据库负载。你会选择什么ASP.NET Web应用程序; nHibernate,Linq或SubSonic
回答
我喜欢SubSonic,因为它很容易配置和生成DAL。这个实现不是一个完整的ORM,因为它只为每个表创建一个类。能够使用存储过程可以补偿何时需要编写作为连接结果的对象。同样,SubSonic旨在实现功能性,因此它可以帮助您快速实现项目目标。
也就是说,您无法使用SubSonic来“编写对象” - 没有描述类之间关系的配置文件。数据库仍然决定你如何塑造你的解决方案。
我们在一个相当活跃的站点上使用ADO.NET实体框架(每天10,000次访问)。这对我们来说是坚实的。缺乏延迟加载很烦人,但它会让你考虑去数据库。
LINQ是一个不错的选择。它在Stackoverflow中使用,在我目前的项目中,我们使用LINQ来访问数据。
SubSonic目前用于我们所有的webform应用程序,并取得了巨大成功。在几分钟内,整个数据库就可以从头开始生成,随时准备在您的应用程序中使用。 SubSonic创作者Rob Conery提供了一些精彩的网络广播,详细介绍了在Web应用程序中设置SubSonic位的过程以及一些很酷的演示,以帮助您开始。检查出SubSonic Project。
我一直在使用LLBLGen Pro作为我的ORM大约一年,它的工作得很好。虽然我没有使用SubSonic,但我被告知它们是相似的。从头开始,它可以从数据库创建一个数据访问层,并且只需几分钟即可使用。有一个轻微的学习曲线,至少对我来说是这样,但帮助文件提供了足够的信息来帮助你完成几乎任何你遇到的问题。该应用程序可以按照没有问题安装的方式使用,但也支持大量定制(可能太多?)。
LLBLGen临岩!延迟加载,预取路径(以最少的查询获取整个图),支持无限的嵌套谓词,连接等。另外,扩展生成的代码非常容易;自助服务模式使用继承策略来允许扩展而不中断生成。 – 2008-10-16 05:16:34
Hibernate for Java项目,但毫无疑问,LINQ for .Net。为什么在内置LINQ时添加外部依赖关系?
我也会去LINQ,但我必须承认LINQ to SQL有分层问题。我已经阅读了很多关于LINQ to SQL的文章,并且他们都建议它基本上是为RAD应用程序创建的。
如果你的数据库中的继承模型与Linq的非常有限的继承支持一起工作,那么我说去Linq。如果你需要更复杂的继承场景,那么我会说,你应该坚持使用NHibernate,并努力解决你遇到的任何痛苦。
如果您对懒惰的初始化代理有特定的麻烦,为什么你没有这样做呢?或只有懒装袋。我认为这是值得一试,然后重写你的应用程序的框架没有延迟加载。
另一个选项是Castle ActiveRecord。它在NHibernate的基础上实现了Active Record design pattern,同时也消除了大部分配置的痛苦(比如它的“isWeb”设置)和映射。
我在微软生态系统的经验:
我使用LINQ2SQL上几个项目,我已经运行到该azamsharp提到的“分层”的问题。
不是说如果你将POCO发送回你的逻辑或UI层,它会有很大的帮助,但是Repository模式的实现对这个令人讨厌的分层和关注问题的分离有点帮助。
对于使用像投票或统计数据(基本上任何域对象需要显示或不同操作上比它在数据库的代表)的ADO.Net实体框架为您提供了一定的优势复杂的语义什么。它可以通过包含复杂的数据检索来简化您的业务逻辑/数据访问层。
ADO.Net Entity Framework Overview
希望帮助!
我会使用NHibernate。持久性无知是我的主要销售字体之一,而不是绑定到数据库是另一个。实体框架有着深刻的缺陷,不仅仅是缺乏延迟加载。 EF和LINQ2SQL都是新技术,而NHibernate非常成熟并且看到了更多的操作。
NHibernate的另一个好处是无需编辑您的数据就可以切换数据库。我将它用于本地运行的集成测试,running them against SQLite and then SQL Server on the CI server。
我不太在乎SubSonic。对我来说,它似乎是一个非常薄的DAL工具。使用SubSonic,我仍然输入了很多字符串文字,这似乎有点让我失望。就个人而言,我更喜欢LLBLGEN:
http://www.llblgen.com/defaultgeneric.aspx
弗兰斯鲍马,创作者,有一个非常好的博客,讨论围绕DAL和ORM技术的许多问题。
- 1. 你今天会选择什么样的数据层,Linq或Subsonic?
- 2. 你会选择在你的应用程序中使用什么导航控件?
- 3. 什么实时框架,你会选择一个高流量的Web应用程序,为什么?
- 4. 你会为后端Web应用程序做什么:Flex,GWT,JQuery?
- 5. 你用什么来部署你的Web应用程序?
- 6. ASP.NET Health Monitoring或ELMAH要选择什么?
- 7. 你用什么工具来调试你的asp.net应用程序?
- 8. 你会选择一个新的Facebook应用程序的PHP框架,为什么?
- 9. asp.net mvc应用程序和asp.net web应用程序有什么区别
- 10. 您使用什么工具在Asp.net或Asp.net mvc中设计Web应用程序?
- 11. SQL Server数据库或XML,为asp.net应用程序选择什么?
- 12. Web应用程序NHibernate会话管理NHibernate风格的夏天
- 13. asp.net web应用程序
- 14. 你会选择在Java应用程序中运行HTML/Javascript
- 15. 如果你必须选择一个免费的CMS来与ASP.NET MVC集成,你会选择什么?
- 16. ASP.NET Web应用程序会话问题
- 17. ASP.NET MVC Web应用程序VS ASP.NET Web应用程序
- 18. 什么东西你想监视一个web应用程序
- 19. ASP.NET。网站或Web应用程序?
- 20. NHibernate与非Web应用程序的StructureMap
- 21. 你能解释一下Struts2 web应用程序会发生什么吗?
- 22. 如何从asp.net web应用程序中选择文件夹或文件?
- 23. ASP.Net Web应用程序选择客户端目录
- 24. ASP.NET web应用程序
- 25. 什么样的应用程序类型/情况你会使用memcache或数据存储在一个去应用程序引擎web应用程序的websessions?
- 26. 你会选择什么 - XPage或旧式表单风格的开发?
- 27. 这两个项目,ASP.NET MVC2 Web应用程序和ASP.NET MVC2空Web应用程序有什么区别?
- 28. ASP.NET Web应用程序中常量的一些示例或用法是什么?
- 29. 我应该创建一个空的Web应用程序或Web API Web应用程序模板吗? - VB.net
- 30. Session在Web应用程序/ ASP.Net中的用途是什么?
我真的鼓励试图发现为什么你间歇的延迟加载问题与NHibernate。这在正常情况下不会发生。 – 2008-10-09 20:39:26
这可能是由于没有使用最新版本,因为我们在NHibernate上构建的访问层最常用的方法不再受支持。看重写它可能与选择新解决方案一样困难。 – dlamblin 2008-10-21 01:19:24