经常变化的数据库,最佳的.NET解决方案是什么?

8
我目前正在设计一个小型的CRUD应用程序。他们的数据库很混乱,并且在未来6个月到一年的时间内会经常更改。针对我的数据层,你会推荐以下哪种方法:
1)ORM(如果是,使用哪种?)
2)Linq2Sql
3)存储过程
4)参数化查询
我真的需要一个足够动态(快速和简单)的解决方案,可以经常替换表格和添加/删除列。
注意:我没有太多关于ORM的经验(只有一点SubSonic),并且通常倾向于使用存储过程,因此也许这将是正确的方式。如果Ling2Sql或NHibernate允许上述情况,我很想学习它们。
12个回答

6

需要注意的一点是,如果数据库架构经常变化,你需要在编译时具备某种程度的类型安全性。我发现NHibernate存在这个问题,因为它使用xml映射文件,所以如果你在数据库架构中进行了更改,直到运行时才知道映射已经失效。

存储过程也会出现类似的问题。

使用Linq2Sql将使您在编译时知道代码何处出现问题,当您更改架构时,这对我来说比其他任何事情都更重要,尤其是在处理经常变化的架构时。


我发现如果你使用linq2sql设计器的“拖放”方法来重构代码,会有点困难。然而,使用Fluent NHibernate,这个问题可以很容易解决。 - hangy
3
使用Fluent NHibernate可以轻松编写集成测试,以检查您的映射是否正确。您可以使用内存数据库来提高测试速度。 - Marek Blotny
2
使用Linq2SQL会给你的孩子带来诅咒。你的家人都将遭受可怕的、由设计师生成的死亡。 - Andrew Bullock

5
我建议您使用SubSonic与生成提供程序(网站项目)设置一起使用。这种方法非常好,因为每次构建项目时它会自动重新生成数据访问层对象,所以如果数据库发生变化导致您的代码出现问题,您将得到一个构建错误。
在数据库架构变得非常复杂并且我们达到了ActiveRecord模式的限制之前,它运行得很好。只要架构不是非常复杂,它就可以很好地工作。一旦架构稳定下来,您可以切换到只在需要时构建数据访问层。

2

你肯定想使用ORM。任何ORM都可以,但你需要的是能生成强类型类的东西。当表格添加、修改或删除字段时,你希望能够重新生成这些类,并仅处理编译时错误。如果你使用动态模型,你可能会遇到许多讨厌的运行时错误。这非常重要!我是sourceforge上 MyGeneration 开发团队的一员,我认为这是你问题的一个很好的解决方案。你可以生成 dOOdads,NHibernate,EasyObjects,EntitySpaces等等。如果你想使用更昂贵的解决方案,请选择CodeSmithLLBLGen Pro。祝你好运 - 任何有兴趣使用 MyGeneration 的人,欢迎随时与我联系。


1
使用EntitySpaces,你会送我花的,保证。 非常棒。随意更改数据库。点击按钮,完成所有更改。而不需要更改你的自定义代码。我喜欢它。

1

这个应用程序有多简单?如果我要在几个月内使用架构/设计工作,而不真正担心实际的应用程序...我会考虑使用EDM和动态数据实体Web应用程序项目。在我看来,这可以让您以最少的努力入门。这使您专注于架构、数据和其他很棒的东西。希望这篇文章不会给我带来太多消极的反响!

下面是新项目对话框的样子this


1

EntitySpaces 可以在一分钟内重新生成您的 DAL/业务层,而且不会有任何代码丢失。请查看试用版 ==> 这里

无需注册,也可在 Visual Studio 下运行。


我可以推荐使用ES,它非常愉快地进行工作。 - Ropstah

1

NHibernate,但前提是您愿意采用面向对象的方法,即先定义类,然后在映射文件中定义所需的表结构,最后使用NHibernate内置的模式生成类创建数据库架构。

如果您想要另一种方式(例如,您有一堆表,然后基于此设计对象),我发现MyGeneration + NHibernate可以实现,尽管我对生成的类不太满意(主要是因为我非常注重真正的面向对象编程)。


1

如果我站在你的角度,我会尝试将我所知道的(存储过程)与Linq2Sql相结合。Linq2Sql仍然可以使用您的存储过程,但是您还可以获得一个新工具的额外奖励。我认为掌握Linq2XXX(X是一个随机技术,而不是成人娱乐...虽然现在想想也不是个坏主意)的语法和方法将成为您使用Linq处理对象集合的技能集的重要补充。

但最终,像NHibernate这样的东西会更适合您的长远发展。


0

看看为什么它在改变,并尝试预测和概括即将到来的变化类型,以便它们不会破坏您的代码

框架可能使适应变化更容易,但深入分析将具有长期效益


0
任何解决方案都可以工作,你真正需要的是一组测试,这些测试将保证基本操作(如插入、选择、更新和删除)的正常运行。这样,你只需运行测试并检查映射是否最新即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接