12

Microsoft 似乎有许多不同的数据访问策略。有“经典”ADO.NET、Linq2Sql、ADO.NET 实体框架、ADO.NET 数据服务、ADO.NET 动态数据。我确定我错过了一些。对我来说,似乎每个框架都适合应用程序的架构有很多困惑。微软试图用所有这些数据访问方法解决什么问题?

4

5 回答 5

15

我不明白这个问题的意义。事实上,这有点太荒唐了。

  • ADO.NET 是 .NET 1.0 的原始数据访问技术。它显然不属于任何关于新数据访问“策略”的讨论
  • LINQ to SQL 是最初的 LINQ 提供程序之一。它提供了数据库结构和程序中使用的类型之间的一对一映射。它旨在与 SQL Server 一起使用
  • ADO.NET Entity Framework 更加灵活。它旨在与任何 ADO.NET 提供程序一起工作,并具有一个映射层,因此该程序与更接近于业务实体而不是数据库表的类一起工作。例如,单个实体可能包含来自多个表的数据。Microsoft 已决定在 EF 上比在 LINQ to SQL 上花费更多的精力。
  • ADO.NET 数据服务是 EF 之上的服务层。如果您要生产自己的服务只是为了公开您的数据,那么这是一个不错的选择。它使用 REST 接口,并且可以以 ATOM 格式公开数据。
  • ASP.NET动态数据不是数据访问策略。请参阅http://www.asp.net/dynamicdata/

这些区别很清楚,只需进行少量研究就可以清楚地说明它们。

于 2009-07-12T22:40:24.490 回答
5

他们正试图解决如何增加销售和市场份额的问题。为此,微软内部的各种团体试图解决如何让更多的开发人员和最终用户使用他们的产品的问题。不同的团队提出了不同的技术,并且像任何大公司一样,微软努力保持其技术的一致性,并且团队朝着相同的目标努力。此外,随着新技术的出现,他们需要保持(或者更好的是,设定)步伐,并继续支持客户投资的旧技术。对于包括微软在内的任何规模相当大的公司来说,最终结果是技术选择有点混乱。

于 2009-07-12T21:49:26.107 回答
3

他们多年来一直采用数据策略。事实上,您可以而且应该搜索“Microsoft 数据访问策略”,您会发现新旧链接(即 1998 年及其 OLEDB 策略)。

我认为您正在寻找的是2007 年开始,即使是 2 年的历史是关于 XML、ADO.NET、数据、LINQ、SQL Server、Visual Studio Orcas、实体框架......他们解决了微软有没有的问题数据访问策略?

是的,事实证明我们做到了。Microsoft 设想了一个实体数据平台,使客户能够定义跨数据服务和应用程序的通用实体数据模型。实体数据平台是一个多版本愿景,未来版本的报告工具、复制、数据定义、安全性等都是围绕一个通用实体数据模型构建的。...

Mike Pizzo,架构师,数据可编程性

我希望它有所帮助。

于 2009-07-12T22:45:14.370 回答
3

你的困惑是我们的无奈。为我们的网站做出这些架构决策的许多人都对微软在这个问题上缺乏明确性和良好的开发实践表示不满。

我的团队肯定被 Linq2Sql 烧死了。

我们现在使用领域驱动设计方法构建我们的网站,特别是巴勒莫的洋葱架构 ( http://jeffreypalermo.com/blog/the-onion-architecture-part-1/ )。业务对象只是 POCO,不依赖于基础设施。

基础设施现在由 NHibernate 和为我们的 CMS 定制的滚动 ORM 处理。这些痛苦的启动成本远远超过了社区将继续朝着最佳方向推动 NHibernate 并且我们控制着我们的 ORM 源​​的知识。更糟糕的是,微软确实发布了一些在 DDD 架构中工作的真正引人注目的东西,我们只需要重写我们的基础设施层。

于 2009-07-12T22:16:53.290 回答
1

如果您不熟悉基本概念,我发现http://msdn.microsoft.com/en-us/magazine/cc700331.aspx上的文章是对 Entity Framework 的一个很好的技术介绍。

这是与此问题相关的部分,解释了 EF 的一些目标以及与 ADO.Net 的关系...

ADO.NET 实体框架是 ADO.NET 的演进,是 EDM 的第一个具体实现,在针对关系数据库进行开发时提供了更高级别的抽象。在 1.0 版本中,团队一直专注于构建平台的基础,而不仅仅是一个简单的 ORM,这将允许开发人员使用非常灵活的映射和适应高度的能力来处理概念或对象模型与底层商店的分歧。

这种高度的灵活性和与底层存储的差异是允许数据库和应用程序分开发展的关键。在数据库模式中进行更改时,应用程序与实体框架的更改隔离,您通常不需要重写应用程序的某些部分,而是在必要时简单地更新映射文件以适应更改。

为了开始发展 ADO.NET 平台,Entity Framework 构建在现有 ADO.NET 2.0 提供程序模型之上,现有提供程序稍作更新以支持新的 Entity Framework 和 ADO.NET 3.5 功能。我们选择在现有的 ADO.NET 提供程序模型之上实现,以确保开发社区熟悉的提供程序模型。

于 2009-07-13T06:10:33.017 回答