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

时间:2009-04-23 15:59:35

标签: asp.net linq-to-sql entity-framework dynamic-data data-access-layer

我正处于规划将大型经典ASP数据库应用程序转换为ASP.Net的早期阶段,我无法选择使用哪种数据访问方法。我使用过Linq To SQL,动态数据,强类型数据集,企业库(数据访问应用程序块)以及一小部分实体框架,但它们都没有作为“一个”跳出来。有太多的选择 - 我的头在游泳,帮我选择!

也许有助于给出我正在转换的应用程序以及优先级的一些背景知识......

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

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

  • 该应用程序有许多数据输入表格和广泛的搜索和报告功能(报告是我将在稍后讨论的另一种野兽)。

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

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

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

感谢您提出的任何建议!

3 个答案:

答案 0 :(得分:5)

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

High Performance Data Access Layer Architecture Part 1

很好的建议。

答案 1 :(得分:2)

您可能希望将数据库层与asp层分离,这样您不仅可以在做出决策时提供更大的灵活性,而且当您必须对客户的数据库进行更改时,您只需交换新的dll即可没有改变任何其他东西。

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

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

由于您更熟悉它,为什么不直接通过建立自己的连接直接进入数据库?然后,您可以移动代码的其余部分,以及您可以决定使用哪种技术的方式。

对于我正在开发的新应用程序,我开始使用LINQ to SQL,主要是因为开发速度会更快,但是,稍后,如果我认为不能满足我的需求,我将把它换掉。 / p>

答案 2 :(得分:1)

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

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