频繁更改数据库的最佳.NET解决方案

时间:2020-03-05 18:39:48  来源:igfitidea点击:

我目前正在设计一个小型CRUD应用程序。他们的数据库非常混乱,并且在接下来的6个月至一年中会不断变化。我们对我的数据层有什么建议:

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

2)Linq2Sql

3)存储过程

4)参数化查询

我确实需要一个足够动态(快速简便)的解决方案,在其中我可以替换表并经常添加/删除列。

注意:我对ORM并没有太多的经验(只有一点SubSonic),通常倾向于使用存储过程,所以这也许是可行的方法。如果任何一种都可以解决上述情况,我很想学习Ling2Sql或者NHibernate。

解决方案

回答

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

对于相反的方法(例如,我们有一堆表,然后将对象设计作为基础),我发现MyGeneration + NHibernate可以工作,尽管我对结果类不太满意(主要是因为我真是真正的面向对象编程的坚持者。

回答

我们已经对存储的proc感到满意,它们可能足以抽象出不断变化的模式。如果ORM对存储的proc感到不满意,那么它们可能会与我们在不断变化的架构之上保持最新状态的View一起使用。

回答

这里要注意的一件事是,如果数据库架构经常更改,则希望具有某种级别的编译时类型安全性。我发现这是NHibernate的问题,因为它使用xml映射文件,因此,如果我们更改数据库架构中的某些内容,则直到运行时映射才被破坏。

存储过程也将是一个问题。

使用Linq2Sql将为我们带来的好处是,我们可以在编译时更改架构时知道代码在何处中断。对于我来说,如果我使用的是频繁更改的模式,那么它将优先于所有其他内容

回答

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

直到数据库架构变得非常复杂并且我们达到了ActiveRecord模式的极限为止,它一直运行良好,但是只要架构不是非常复杂,它就可以很好地工作。一旦架构稳定下来,就可以进行切换,以便仅在需要时才构建DAL。

回答

如果我不知所措,我将尝试通过Linq2Sql利用我所知道的(存储过程)。 Linq2Sql仍然可以使用存储库,但是我们还有一个额外的好处,就是可以将新工具置入皮带。我认为掌握Linq2XXX(X是一种随机技术,而不是成人娱乐技术……现在,我认为这不是一个坏主意)语法和方法学将是我们使用以下技能的绝妙补充在对象集合上的Linq很甜蜜。

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

回答

我们肯定要使用ORM。任何ORM都可以,但是我们需要能够生成强类型类的东西。当从表中添加,修改或者删除字段时,我们希望能够重新生成这些类,并仅处理固定的编译时错误。如果使用动态模型,则可能会出现许多讨厌的运行时错误。这个非常重要!我是Sourceforge上MyGeneration开发小组的成员,我认为这是解决问题的好方法。我们可以生成dOOdads,NHibernate,EasyObjects,EntitySpaces等。如果要使用更昂贵的解决方案,请使用CodeSmith或者LLBLGen Pro。希望对使用MyGeneration有兴趣的任何人,如果有任何问题,请随时与我联系。

回答

如果数据库模式经常更改,则首选实体框架,而不是LINQ2SQL。如果架构发生更改,则必须使用L2S
1)删除并重新添加表(失去自定义)
2)手动修改模型(如此处的stackoverflow所示)

EF是L2S的超集,为我们提供了使用和dbms独立性方面的更多灵活性

回答

看看它为什么会改变,看看我们是否可以预见并概括即将出现的各种变化,以使它们不会破坏代码

一个框架可以使适应变更变得更加容易,但是更深入的分析将有长期的好处

回答

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

回答

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

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

回答

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

回答

应用程序有多简单?如果我要使用模式/设计资料几个月,并且不必担心真正的应用程序。 。 。我会考虑使用EDM和动态数据实体Web应用程序项目。我认为,这可以让我们以最少的精力就可以开始工作。这使我们可以专注于架构,数据和其他棘手的事情。我希望这不会给我带来太多麻烦!

这是新项目对话框的外观,如下所示