经常更改的数据库的最佳.NET解决方案

时间:2008-08-15 01:50:02

标签: .net database change-management

我目前正在构建一个小型CRUD应用程序。他们的数据库非常混乱,并且在接下来的6个月到一年的时间里会经常变化。你会为我的数据层推荐什么:

1)ORM(如果是,哪一个?)

2)Linq2Sql

3)存储过程

4)参数化查询

我真的需要一个足够动态的解决方案(既快速又简单),我可以替换表并经常添加/删除列。

注意:我对ORM没有太多经验(只有一点SubSonic),并且通常倾向于使用存储过程,所以这可能是最佳选择。我很想学习Ling2Sql或NHibernate,如果它们允许我上面描述的情况。

12 个答案:

答案 0 :(得分:6)

这里需要注意的一件事是,如果数据库模式经常更改,您希望具有某种程度的编译时类型安全性。我发现这是NHibernate的一个问题,因为它使用xml映射文件,所以如果你在数据库模式中改变一些东西,你就不知道直到运行时映射被破坏了。

存储过程也会出现问题。

使用Linq2Sql可以让您在编译时更改模式时知道代码的确切位置。对我而言,如果我正在使用频繁更改的架构

,这将优先于其他所有内容

答案 1 :(得分:5)

我会使用构建提供程序(网站项目)设置来查看SubSonic。这很好用,因为它会在每次构建项目时自动重新生成DAL对象,因此如果数据库以破坏代码的方式更改,则会出现构建错误。

在数据库模式变得非常复杂并且我们达到了ActiveRecord模式的限制之前,它运行良好,但只要模式不是非常复杂,它就能很好地工作。架构稳定后,您可以切换,以便在需要时只构建DAL。

答案 2 :(得分:2)

你肯定想要使用ORM。任何ORM都可以,但你想要一些能产生强类型类的东西。当从表中添加,修改或删除字段时,您希望能够重新生成这些类,并且只处理修复编译时错误。如果使用动态模型,则可能会出现许多令人讨厌的运行时错误。这是非常重要的!我是sourceforge上MyGeneration开发团队的成员,我认为这是解决问题的绝佳方法。您可以生成dOOdads,NHibernate,EasyObjects,EntitySpaces等。如果您想使用更昂贵的解决方案,请使用CodeSmithLLBLGen Pro。祝你好运 - 任何对使用MyGeneration感兴趣的人都可以随时与我联系。

答案 3 :(得分:1)

申请有多简单?如果我要使用架构/设计的东西几个月,而不是真的担心一个真正的应用程序。 。 。我会考虑使用EDM和动态数据实体Web应用程序项目。在我看来,这可以让你以最少的努力去做。这使您专注于架构,数据和其他有瑕疵的事情。我希望不要从这个中得到太多的负面障碍!

以下是新项目对话框的外观this

答案 4 :(得分:1)

NHibernate,但前提是您可以使用对象优先方法来定义类,然后在映射文件中定义所需的表结构,然后使用NHibernate构建的数据库模式在模式生成类中。

为了做到这一点(例如,你有一堆表,然后你的对象设计基于那个)我发现MyGeneration + NHibernate工作,虽然我不太高兴结果类(主要是因为我是真正的面向对象编程的坚持者)。

答案 5 :(得分:1)

使用EntitySpaces。你会送我鲜花,保证。 就是棒。根据需要更改数据库。按下按钮,砰的一声。你的所有改变都已完成。无需更改自定义代码。我喜欢它。

答案 6 :(得分:1)

如果我在你的鞋子里,我会尝试利用我对Linq2Sql的了解(sprocs)。 Linq2Sql仍然可以使用你的sprocs但是你有额外的好处,在你的腰带放一个新的工具。我认为掌握Linq2XXX(X是随机技术而不是成人娱乐......现在我想起来这不是一个坏主意)语法和方法将成为你使用技能的一个很好的补充Linq对一组物品的看法很甜蜜。

但从长远来看,最终像NHibernate这样的东西会更适合你。

答案 7 :(得分:1)

EntitySpaces可以在一分钟内重新生成您的DAL /业务层,并且不会丢失代码,请参阅试用版==> HERE

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

答案 8 :(得分:0)

看看它为什么会发生变化,看看你能否预测并概括你所做的各种变化,以免它们破坏你的代码

框架可以使更改变得更容易,但更深入的分析将带来更长远的利益

答案 9 :(得分:0)

您已经对存储过程感到满意,它们可能足以抽象出不断变化的架构。如果ORM对存储过程不满意,那么也许他们可以使用Views来保持最新的模式。

答案 10 :(得分:0)

任何解决方案都可以工作,你真正需要的是一组测试,它们可以保证插入,选择,更新和删除等基本操作都能正常工作。这样您就可以简单地运行测试并检查映射是否是最新的。

答案 11 :(得分:0)

如果数据库架构经常更改,则优先选择实体框架而不是LINQ2SQL。如果架构发生变化,则必须使用L2S 1)删除并重新添加表格(丢失自定义)
2)手动修改模型(在stackoverflow中完成)

EF是L2S的超级集合,为您提供更多的使用灵活性和dbms-independent