.NET 和数据库层

Posted

技术标签:

【中文标题】.NET 和数据库层【英文标题】:.NET and database layers 【发布时间】:2010-10-11 19:50:42 【问题描述】:

当我上次从事编程工作时,我们试图从 DataReaders 和传统的 ADO.NET API 转向对象关系映射 (ORM)。

为此,我们通过sqlmetal 为我们的数据库生成了DataContext。然后有一个瘦数据层构成DataContextprivate,任何需要访问数据库的代码都必须在这个瘦数据层中使用public方法。这些方法基本上是存储过程;他们将通过 LINQ to SQL 对数据库执行查询。

这是当今常见的方法吗?我的意思是,每个使用 .NET 3.5 框架的人是否真的在他们的构建过程中运行 sqlmetal,还是什么?这在当时几乎像是一个黑客攻击。

基本上,我想知道如果我今天要在不使用第三方开源的 .NET 3.5 商店编写 DAL,LINQ to SQL 和 sqlmetal 是否是预期的ORM。

【问题讨论】:

我也想知道。多年来,我一直在使用自己的 DAL/ORM,我所看到的只是来自 MS 的事情(linqToSQL 就是一个例子)。我暂时保留我的。 same here...我有什么工作,我最近在 linq2sql 中做了一个项目,看看我是否错过了一些重要的事情,虽然没关系,但不足以让我切换。 ..我坚持使用数据读取器、存储过程和自定义类来处理所有事情。 很高兴看到 .NET 不断发展,但试图弄清楚要押注哪匹马有点令人沮丧! :) 【参考方案1】:

拥有某种数据访问层仍然被认为是最佳实践。这是否最好通过 ORM 实现是一个备受争议的问题。有一个派系通常认为 ORM 是要走的路。另一派认为,以存储过程和数据库为中心是最好的途径。

另外,这可能不是你想要的海报,但它很相似(也是我隔间里的那个)

http://download.microsoft.com/download/4/a/3/4a3c7c55-84ab-4588-84a4-f96424a7d82d/NET35_Namespaces_Poster_LORES.pdf

【讨论】:

【参考方案2】:

你的方法很好。我目前使用 Astroria 服务 (ADO.NET Data Services)。 MSDN Magazine 中有一个很好的介绍。

我也喜欢新的PLINQO(虽然需要CodeSmith Tools)。在我看来,这非常巧妙。

当我有这样一个 DAL(服务层)时,我只是从我的客户端应用程序(Silverlight 或 ASP.NET MVC)中使用此服务。

【讨论】:

【参考方案3】:

我认为这取决于您的使用,但我会说您解释的数据层如此薄,这将是您的 DAL。大多数项目将在此基础上构建另一层,主要用于编辑/创建逻辑,也许还有一些用于获取的拼接逻辑。

对于我的大多数项目,我都是这样设计的。

Repository 保存 DataContext 的实例并公开一些基本的添加/删除方法 ProductRepository :存储库公开一般查询 (IQueryable) StoreService 使用 ProductRepository、SalesRepository 等不同存储库的实例,并处理用于创建产品等内容的所有逻辑。

比如……

StoreService.CreateProduct(/* properites */)

这将返回某种结果类。

【讨论】:

我知道我不是唯一一个在通常的业务线应用程序中使用这种方法的人!自从我开始使用这种方法进行开发以来,可维护性和关注点分离一直是最大的好处。【参考方案4】:

最好的数据层是简单明了的数据层,它可以在没有任何花哨的情况下完成工作。我已经使用了你提到的技术,并在这里写过它们: The Only Pattern for Data Access is - There Are No Patterns for Data Access

【讨论】:

我同意。我读了你的博客,这很有意义。感谢您的确认。【参考方案5】:

这个站点使用的是 LINQ to SQL,所以请随意使用。

在新开发方面,微软正式支持Entity Framework over LINQ to SQL。然而,有一群人认为EF is the wrong way to go。 LINQ to SQL 仍将存在一段时间,并且是一个非常不错的 ORM,如果在您可以使用的 DB 后端方面有所限制。

我会推荐 LINQ 作为 ORM 的一个很好的起点。如果您需要更好的,请查看 EF 和/或 NHibernate。

【讨论】:

你知道是否有官方回应“不信任投票”引发的担忧? 我目前没有任何链接,也不想挖掘,但我很确定官方的说法是这样的:“操,我们正在做 EF无论如何我们想要的方式”。不过,我敢肯定它比这更多的是 PC。 :) 我认为他们说很多问题将在以后的版本中修复。尽早/经常发货等。【参考方案6】:

“这是当今常见的方法吗?我的意思是,每个使用 .NET 3.5 框架的人是否真的在他们的构建过程中运行 sqlmetal,还是什么?”

我认识的使用 3.5 框架的人(几乎所有人)——绝大多数人——仍在使用 NHibernate。 2.0 版是一个非常好的 OR/M。我开始在最近的一个项目中使用它,它大大减少了我的数据访问代码,以至于我以后真的不想使用其他任何东西。 Fluent NHibernate API 正在为不喜欢 XML 映射的人们取得一些进展。

【讨论】:

以上是关于.NET 和数据库层的主要内容,如果未能解决你的问题,请参考以下文章

深入探讨:如何理解.Net的三层架构

ASP.NET MVC 的三层架构 + EF数据模型

如何将数据从表示层传递到业​​务逻辑层? (ASP.NET MVC 5)

ASP.NET MVC 的三层架构 + EF数据模型

为 .NET 数据访问层使用 MySql 存储过程

今天为 ASP.net 推荐哪个数据访问层?