6

我正处于规划将大型经典ASP数据库应用程序转换为ASP.Net的早期阶段,并且无法找出使用哪种数据访问方法。我玩过Linq To SQL,动态数据,强类型数据集,企业库(数据访问应用程序块),以及一点Entity Framework,但他们都没有跳出来作为“一个”。有太多的选择 - 我的头在游泳,帮我选择!需要关于选择数据访问方法的建议

也许这将有助于使上,我与优先转换沿应用程序的一些背景...

  • 后端为Microsoft SQL Server(2005或更高版本)和我们承诺那样,所以我不必担心曾经支持过不同的数据库平台。

  • 数据库非常成熟,包含了大量的业务逻辑。它高度规范化并广泛使用存储过程,触发器和视图。我宁愿不在同一时间重新创建两个轮子,所以我想尽可能少地更改数据库。所以,我需要选择一种足够灵活的数据访问方法,以便我能够解决数据库中的任何怪癖。

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

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

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

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

感谢您提供任何建议!

回答

1

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

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

+0

有很多方法可以做同样的事情,我想看看哪种工具对其他产品有好处(即何时使用哪一种)?以及对某些参数的工具评估(例如学习曲线,维护,简单性,社区支持等) – shahkalpesh 2009-04-23 16:40:54

+0

我听说nHibernate功能非常强大,但我也读了一下,学习曲线非常陡,以便使用它正确的方法。不幸的是,我们没有那种时间。 – CowherPower 2009-04-23 18:09:46

+0

你有多少时间?我花了几天的时间才弄清楚如何映射我的第一个对象图3。我是1的开发人员,听起来像你有一个团队。 – JoshBerke 2009-04-23 21:58:21

2

您可能希望查看从asp层解耦数据库层,这样您不仅可以提供更多灵活性来做出决定,但是当您必须对客户数据库进行更改时,您可以交换新的DLL没有改变任何东西。

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

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

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

对于我正在开发的新应用程序,我开始使用LINQ to SQL,主要是因为开发速度会更快,但是,如果我决定不满足需求,我将只交换它。