需要有关选择数据访问方法的建议

Posted

技术标签:

【中文标题】需要有关选择数据访问方法的建议【英文标题】:Need advice on selecting a data access method 【发布时间】:2010-10-21 09:51:18 【问题描述】:

我正处于计划将大型经典 ASP 数据库应用程序转换为 ASP.Net 的早期阶段,我在选择使用哪种数据访问方法时遇到了麻烦。我玩过 Linq To SQL、动态数据、强类型数据集、企业库(数据访问应用程序块)和一点点实体框架,但没有一个让我觉得“那个”。选择太多了-我的头在游泳,帮我选择!

也许提供一些关于我正在转换的应用程序的背景以及优先级...

后端是 Microsoft SQL Server(2005 或更高版本),我们致力于此,因此我无需担心支持不同的数据库平台。

数据库非常成熟,包含了大量的业务逻辑。它高度规范化并广泛使用存储过程、触发器和视图。我不想同时重新发明两个***,所以我想对数据库做尽可能少的改动。因此,我需要选择一种足够灵活的数据访问方法,让我能够解决数据库中的任何问题。

该应用程序具有许多数据输入表单以及广泛的搜索和报告功能(报告是我稍后将解决的另一个问题)。

应用程序需要足够灵活,以处理对数据库结构的微小更改。应用程序(和数据库)可以安装在对数据库进行少量自定义修改的不同站点。理想情况下,应用程序可以识别数据库扩展并做出适当的反应。换句话说,如果我需要在应用程序中存储一个 O/R 映射,我需要能够在将应用程序和数据库安装到新站点时将其换出(或轻松刷新)。

李>

快速应用程序开发至关重要。由于数据库已经完成,并且用户界面将与现有应用程序紧密匹配,我希望找到一些可以很快完成的东西。如果可以节省开发时间,我愿意牺牲不使用绝对最新和最伟大的技术。换句话说,如果使用 Entity Framework 之类的东西有一个陡峭的学习曲线,我可以使用强类型数据集和自定义 DAL 之类的东西,如果它可以加快进程的话。

我是 ASP.Net 的新手,但对经典 ASP、T-SQL 和旧 ADO(例如断开连接的记录集)非常熟悉。如果任何一种数据访问方法更适合来自我背景的人,我可能会倾向于那个方向。

感谢您提供的任何建议!

【问题讨论】:

【参考方案1】:

查看本系列的所有三篇文章:

High Performance Data Access Layer Architecture Part 1

很好的建议。

【讨论】:

谢谢,这是一个非常有趣的系列文章。如果我决定从头开始构建自己的 DAL,我可能会使用这种方法。但我必须将它转换为 VB,因为我不太了解 C#。 大部分都可以轻松转换——尤其是如果您使用 Reflector 之类的工具将二进制文件反汇编为 VB.Net。另外,请记住,在您的解决方案中,即使您的表示层是 vb.net,您的 DAL、DTO 和业务层也可以是 C#,如果您想朝那个方向发展。 我还发现了这个很酷的站点,它将为您将 C# 转换为 VB.net。它似乎工作得很好:developerfusion.com/tools/convert/csharp-to-vb【参考方案2】:

您可能希望考虑将数据库层与 asp 层分离,这样您不仅可以在做出决定时提供更大的灵活性,而且当您必须对客户的数据库进行更改时,您只需换入新的 dll无需更改任何其他内容。

通过使用依赖注入,您可以使用 xml 告诉框架将哪个具体类用于接口。

这样做的好处是您可以使用一种数据库方法,如果您以后决定更改为另一种方法,那么您可以只更改 dll 并继续进行,而无需对其他层进行任何更改。

既然您更熟悉它,为什么不直接通过自己的连接直接进入数据库呢?然后,您可以移动其余代码,并在此过程中决定使用无数种技术中的哪一种。

对于我正在开发的一个新应用程序,我从 LINQ to SQL 开始,主要是因为开发会更快,但是,如果以后我认为这不能满足我的需求,我就会把它换掉。

【讨论】:

当您说“为什么不直接访问数据库”时,您是指直接使用 SQLDataSource 和数据集之类的东西吗?我不反对,但如果新技术没有使“直接”方法过时(或愚蠢的选择),我不想走那条路。 您可能会发现这个 url 对性能很感兴趣:toomanylayers.blogspot.com/2009/01/… DataReader 可能是一个有用的选择。我不认为直接路由已经过时,如果它加快了你的开发,为了维护,以后你可能想要改变。 有趣的文章。我已经倾向于反对使用实体框架,这几乎决定了这个决定。【参考方案3】:

nHibernate 可能是一个不错的选择。您可以将映射存储在外部配置文件中,这将解决您的需求。另一种选择可能是使用基于 nHibernate 的ActiveRecord。

nHibernate 有一个简洁的功能,您可能会发现它很有帮助。它被称为动态属性,它基本上是通过从映射文件中提取列名来填充的名称值对集合。因此,当您在客户端站点添加列时,您会更新映射文件,并且您可以通过对象上的集合访问数据。

【讨论】:

有这么多方法可以做同样的事情,我想看看哪一种工具比其他工具好(即何时使用哪一种)?以及对某些参数的工具评估(例如学习曲线、维护、简单性、社区支持等) 我听说 nHibernate 非常强大,但我也了解到要正确使用它,学习曲线非常陡峭。不幸的是,我们没有那样的时间。 你有多少时间?我花了几天时间才弄清楚如何最多映射我的第一个对象图 3。我是 1 的开发者,听起来你有一个团队。

以上是关于需要有关选择数据访问方法的建议的主要内容,如果未能解决你的问题,请参考以下文章

需要有关将数据从服务器推送到客户端应用程序的建议

Angular 7 客户端的单个微服务(春季启动)的 AWS 选择

提升 Apache Hudi Upsert 性能的三个建议

关于大数据的建议和SQL的局限性

需要有关分层解决方案、关注点分离等方面的建议

单链表学习(二)