或许还有别的?我已经在使用 nHibernate,但我偶尔会遇到延迟初始化的代理对象实际上不会初始化的问题。我正在考虑尝试别的东西。该站点具有用户帐户、用户帖子和照片,并将这些过滤到某些位置名称和标题/描述匹配。更不用说投票、评级和标记为收藏。所有这些都会导致不同数量的数据库负载。
13 回答
SubSonic 目前在我们所有的网络表单应用程序中都取得了巨大的成功。在几分钟内,您的整个数据库就可以从头开始生成并准备在您的应用程序中使用。SubSonic 的创建者 Rob Conery 有一些很棒的网络广播,详细介绍了在 Web 应用程序中设置 SubSonic 位的过程,以及一些很酷的演示来帮助您入门。查看SubSonic 项目。
我已经为我的 ORM 使用LLBLGen Pro大约一年了,而且效果还不错。虽然我没有使用过 SubSonic,但有人告诉我它们是相似的。从头开始,它可以从您的数据库创建一个数据访问层,并在几分钟内准备好使用。有一点学习曲线,至少对我来说是这样,但是帮助文件提供了足够的信息来帮助你完成几乎所有遇到的事情。该应用程序可以按原样安装使用,但也支持大量自定义(可能太多了?)。
我会使用 NHibernate。Persistence Ignorance 是我的主要卖点之一,不绑定到数据库是另一个。实体框架存在严重缺陷,不仅仅是缺少延迟加载。EF 和 LINQ2SQL 都是新技术,而 NHibernate 已经非常成熟并且已经看到了更多的行动。
NHibernate 的另一个好处是能够在不编辑数据库的情况下切换数据库。我将它用于在本地运行的集成测试,针对 SQLite 运行它们,然后在 CI 服务器上运行 SQL Server。
我们在一个相当活跃的站点(每天 10,000 次访问)上使用 ADO.NET Entity Framework。这对我们来说很稳固。缺少延迟加载很烦人,但它会让你考虑去数据库。
如果您在数据库中的继承模型与 Linq 非常有限的继承支持一起工作,那么我说去 Linq。如果您需要更复杂的继承场景,那么我会说您应该坚持使用 NHibernate 并克服您遇到的任何痛苦。
另一种选择是Castle ActiveRecord。它在 NHibernate 之上实现了Active Record 设计模式,并且还消除了配置(例如它的“isWeb”设置)和映射的大部分痛苦。
如果您在延迟初始化代理方面遇到特定问题,为什么不放弃呢?或仅延迟加载袋子。我认为在你用一个没有延迟加载的框架重写你的应用程序之前,值得一试。
我在微软生态系统中的经验:
我在几个项目中使用了 Linq2Sql,并且遇到了 azamsharp 提到的“分层”问题。
如果您一心想要将 POCO 发送回您的逻辑或 UI 层,这并没有多大帮助,但是存储库模式的实现对解决令人讨厌的分层和关注点分离问题有一点帮助。
对于任何使用复杂语义的事物,例如投票或统计信息(基本上任何需要以不同于数据库中表示的方式显示或操作的域对象),ADO.Net 实体框架都会为您提供一些优势。它可以通过包含复杂的数据检索来简化您的业务逻辑/数据访问层。
希望有帮助!
我喜欢 SubSonic,因为它很容易配置和生成 DAL。该实现不是一个成熟的 ORM,因为它只为每个表创建一个类。当您需要组合作为连接结果的对象时,能够使用存储过程进行补偿。同样,SubSonic 旨在发挥作用,因此它将帮助您快速实现项目目标。
也就是说,您不能使用 SubSonic 来“组合对象”——没有描述类之间关系的配置文件。数据库仍然决定了您如何塑造您的解决方案。
我真的不喜欢 SubSonic。对我来说,它似乎是一个非常薄的 DAL 工具。使用 SubSonic,我仍然在输入很多字符串文字,这似乎对我来说有点失败。就个人而言,我更喜欢 LLBLGen:
http://www.llblgen.com/defaultgeneric.aspx
创建者 Frans Bouma 有一个非常好的博客,其中讨论了有关 DAL 和 ORM 技术的许多问题。
LINQ 是一个不错的选择。它在 Stackoverflow 上使用,在我当前的项目中,我们使用 LINQ 进行数据访问。
用于 Java 项目的 Hibernate,但毫无疑问,用于 .Net 的 LINQ。为什么在内置 LINQ 时添加外部依赖项?
尽管我必须承认 LINQ to SQL 存在分层问题,但我也会使用 LINQ。我读过很多关于 LINQ to SQL 的文章,所有文章都认为它基本上是为 RAD 应用程序创建的。