如果您可以使用任何 .NET DAL 技术,您会选择啥?
Posted
技术标签:
【中文标题】如果您可以使用任何 .NET DAL 技术,您会选择啥?【英文标题】:What would you choose if you could use any .NET DAL technology?如果您可以使用任何 .NET DAL 技术,您会选择什么? 【发布时间】:2010-10-03 02:43:00 【问题描述】:几年后我又重新开始了 .NET 开发,现在看来,尤其是使用 LINQ,访问数据的方式已经改变并且变得更加容易。例如,在 ASP.NET MVC 网站中,我可以:
添加项目 添加 LINQ-to-SQL 类 将数据库表拖到 LINQ-to-SQL 对象关系设计器上,点击保存 通过 LINQ 单线访问和操作我的数据 (我在这里学到的:http://www.asp.net/learn/mvc/tutorial-11-cs.aspx)这看起来很棒,但它有多真实?
上面的 LINQ-to-SQL 场景是您在实际项目中使用的东西,还是只是一种快速的脚手架技术,即当您开始在数据库中添加、删除字段和表时会发生什么,LINQ-to 如何-SQL 类保持同步?我如何理解这个领域的所有新技术,例如
Subsonic 适合哪些领域? Astoria(ADO.NET 数据服务)适用于哪些领域? NHibernate 适合哪些领域? 如何将其他数据库与 LINQ-to-SQL 一起使用(我尝试在对象关系设计器上拖动 SQLite 表并得到“不支持的错误”)还是 LINQ-to-SQL 仅适用于 SQL Server? LINQ-to-XML 是否像 LINQ-to-SQL 一样工作,例如我可以将 XML 文件拖到设计器上,然后使用 LINQ 访问它们,还是需要为此编写自己的代码?LINQ-to-Entities 是否像 LINQ-to-SQL 一样工作,即自动生成的类,但只有更多选项?
现在我们拥有 LINQ,ADO.NET 及其 DataTables 和 DataSets 是否是一项旧技术? LINQ-to-ADO.NET 有意义吗?
Azure 适合你甚至没有 RDBMS 的地方
当您的 UI 只是以 REST 方式与 WCF 对话或与 Web 服务对话时,ESB 适合什么?既然我们有这么多选择,如果您可以为一个项目选择这些技术中的任何一种,您会选择哪一种?为什么?
【问题讨论】:
我会选择坐在黑暗的角落,用锋利的棍子戳自己。 :-) 我们在 Stack Overflow 上使用 LINQ2SQL - 它非常灵活:根据需要使用模型类,或者在必须具有最佳性能时淘汰原始 SQL! 【参考方案1】:最初的响应(主要是关于 LINQ 的东西):
LINQ to SQL 可以在实际项目中使用;我已经做好了。我们倾向于将所有数据访问代码放在当您右键单击设计图面并选择“查看代码”时生成的部分类中,而不是在整个代码中作为单行代码分散。 使用 LINQ to SQL 如果您修改数据库,则需要删除并重新添加表 - 这有点限制,使用实体框架,您可以“从数据库更新模型”以自动添加/删除这些列。 它可能应该被称为 LINQ to MSSQL Server - 它直接绑定到 SQL Server。如果您想对其他数据源使用类似的工具,您可以查看实体框架 - 但目前它还有其他限制 - LINQ to SQL 就像任何概念证明一样可以工作。 ADO.NET 数据服务为您提供基于 REST 的 ADO.NET 对象接口 - 因此您可以调用简单的 Web 服务来检索数据,而无需编写这些服务。 不,没有用于 LINQ to XML 的设计界面 - 我想有人可以使用 XSD 做一些事情,这会很有趣;) 您可以将 Azure 视为“云中的操作系统”,它有一个用于存储的数据库,尽管正如您所说,它不是关系型的,没有连接,但您仍将查询它以获取结果.要回答您的最后一个问题,我对 NHibernate 或其他人的了解还不够多,但我很乐意使用 LINQ to SQL 进行基本数据库访问,但我已经开始为我的比其他更复杂的东西——主要是因为我喜欢漂亮的图片。
【讨论】:
【参考方案2】:关于 SQLite:我已经成功地使用 dbLinq 构建了对 SQLite 数据库的 LINQ 查询。它仍处于起步阶段,因此希望必须在生成的类中修复一些东西,但它满足了我的需求。它会做我猜 LinqToSql 会做的所有事情的 85%。并且项目中有大量的单元测试来告诉你他们知道什么是失败的。
dbLinq 支持许多其他数据库(mysql、PostgreSQL、Firebird)。除了 SQLite,我没有将它用于其他任何东西。
【讨论】:
【参考方案3】:我刚刚开始为我们正在启动的一个新项目回答同样的问题,并且在比较了我们决定LLBLGen 的备选方案之后,因为:
比实体框架更成熟 支持 Linq 查询 它正在由几个专门的开发人员积极开发 不贵 支持很棒ps。我应该提一下,我不隶属于 llblgen 和/或解决方案设计。
【讨论】:
这符合我迄今为止试图理解这一切的经验,你询问一种技术,人们只会告诉你更多,然后:-) 我们也使用 llblgen。快速启动和运行非常棒,特别是如果您首先考虑数据库。唯一的问题是,如果您设置为 DDD,它确实不是最佳选择。【参考方案4】:我也使用 linq2sql,效果很好。 一旦你意识到生成的类是部分的,你就可以把自定义代码、字段等等放在那里。 我几乎从生成的 linq2sql 类中创建了我的业务类。
一个警告:默认情况下,varchar(1) 会转换为 char。这给我带来了麻烦,因为 varchar(1) 可以是 "" 而 char 不能...然而,在属性窗口中简单地切换到字符串解决了这个问题。
【讨论】:
以上是关于如果您可以使用任何 .NET DAL 技术,您会选择啥?的主要内容,如果未能解决你的问题,请参考以下文章
当 ASP.NET 忽略 CustomValidator 时,您会怀疑啥?