【问题标题】: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 类保持同步?

我如何理解这个领域的所有新技术,例如

  • 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!

标签: .net linq data-access-layer


【解决方案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 不能...然而,在属性窗口中简单地切换到字符串解决了这个问题。

      【讨论】:

        猜你喜欢
        • 2012-11-19
        • 1970-01-01
        • 2010-09-13
        • 2011-07-18
        • 2020-12-13
        • 2017-02-08
        • 2012-03-15
        • 2010-12-21
        • 2011-02-22
        相关资源
        最近更新 更多