8

几年后,我重新开始了 .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 类如何保持同步?

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

  • 亚音速适合哪里?
  • 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 适合什么?

既然我们有这么多的选择,如果你可以为一个项目选择这些技术中的任何一种,你会选择哪一种,为什么?

4

4 回答 4

4

最初的回应(主要是关于 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 进行基本数据库访问,但我已经开始研究 LINQ to Entities 以获得更复杂的东西而不是其他的——主要是因为我喜欢漂亮的照片。

于 2009-01-23T10:35:13.610 回答
1

对于我们正在启动的一个新项目,在比较了我们决定选择LLBLGen的替代方案之后,我不得不回答同样的问题,因为:

  • 它比实体框架更成熟
  • 它支持 Linq 查询
  • 它正在由几个专门的开发人员积极开发
  • 它不贵
  • 支持很棒

附言。我可能应该提到我隶属于 llblgen 和/或解决方案设计。

于 2009-01-23T10:25:13.740 回答
1

关于SQLite:我已成功使用 dbLinq 构建对 SQLite 数据库的 LINQ 查询。它仍处于起步阶段,因此希望必须在生成的类中修复一些东西,但它满足了我的需求。它会做我猜 LinqToSql 会做的所有事情的 85%。项目中有很多单元测试可以告诉你他们知道什么是失败的。

dbLinq 支持许多其他数据库(MySQL、PostgreSQL、Firebird)。除了 SQLite,我没有将它用于其他任何东西。

于 2009-05-07T20:25:33.377 回答
0

我也使用 linq2sql,效果很好。一旦您意识到生成的类是部分的,您就可以将自定义代码、字段等放在那里。我几乎从生成的 linq2sql 类中创建了我的业务类。

一个警告: varchar(1) 默认转换为 char。这给我带来了麻烦,因为 varchar(1) 可以是 "" 而 char 不能...然而,在属性窗口中简单地切换到字符串解决了这个问题。

于 2009-01-23T10:45:05.727 回答