Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
针对频繁更改的数据库的最佳.NET解决方案_.net_Database_Change Management - Fatal编程技术网

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

针对频繁更改的数据库的最佳.NET解决方案,.net,database,change-management,.net,Database,Change Management,我目前正在设计一个小型CRUD应用程序。他们的数据库乱七八糟,在未来6个月到一年内将频繁变化。您会为我的数据层推荐什么: 1) ORM(如果是,哪一个?) 2) Linq2Sql 3) 存储过程 4) 参数化查询 我真的需要一个足够动态(既快又简单)的解决方案,在这里我可以频繁地替换表和添加/删除列 注意:我在ORM方面没有太多经验(只有一点亚音速),通常倾向于使用存储过程,所以这可能是最好的方法。我很想学习Ling2Sql或NHibernate,如果其中任何一种能够考虑到我上面描述的情况。,但

我目前正在设计一个小型CRUD应用程序。他们的数据库乱七八糟,在未来6个月到一年内将频繁变化。您会为我的数据层推荐什么:

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

2) Linq2Sql

3) 存储过程

4) 参数化查询

我真的需要一个足够动态(既快又简单)的解决方案,在这里我可以频繁地替换表和添加/删除列

注意:我在ORM方面没有太多经验(只有一点亚音速),通常倾向于使用存储过程,所以这可能是最好的方法。我很想学习Ling2Sql或NHibernate,如果其中任何一种能够考虑到我上面描述的情况。

,但前提是您能够采用对象优先的方法,在这种方法中定义类,然后在映射文件中定义所需的表结构,然后使用NHibernate的内置模式生成类创建数据库模式


通过另一种方式(例如,你有一堆表,然后你将你的对象设计建立在这些表的基础上),我发现+NHibernate可以工作,尽管我对结果类不太满意(主要是因为我对真正的面向对象编程非常执着).

您已经对存储的进程感到满意,它们可能足以抽象出不断变化的模式。如果ORM对存储的进程不满意,那么他们可能会使用您在不断变化的模式上保持最新的视图。

这里需要注意的一个关键问题是,如果数据库模式频繁变化,您希望具有某种级别的编译时类型安全性。我发现这是NHibernate的一个问题,因为它使用xml映射文件,所以如果您更改了数据库模式中的某些内容,直到运行时您才知道映射被破坏了

存储过程也会出现问题


在编译时更改模式时,使用Linq2Sql将使您能够准确地知道代码的中断位置。对于我来说,如果我使用的是一个经常变化的模式,那么这将优先于其他任何东西。我将使用构建提供者(网站项目)设置查看亚音速。这非常有效,因为它会在每次构建项目时自动重新生成DAL对象,因此如果数据库的更改破坏了您的代码,则会出现构建错误


直到数据库模式变得非常复杂,我们达到了ActiveRecord模式的极限,它才工作得很好,但只要模式不是非常复杂,它就工作得很好。一旦模式稳定,您就可以切换,以便只在需要时构建DAL。

如果我处于您的位置,我会尝试利用我所知道的Linq2Sql(存储过程)。Linq2Sql仍然可以使用存储过程,但是您还可以在腰带上放一个新工具。我认为掌握Linq2XXX(X是一种随机技术,而不是成人娱乐……现在我认为这是一个不错的主意)语法和方法将是对您的技能集的一个很好的补充,在一组对象上使用Linq是非常好的


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

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

如果数据库模式经常更改,请选择实体框架而不是LINQ2SQL。如果模式发生变化,则必须使用L2S
1) 删除并重新添加表格(取消自定义)
2) 手动修改模型(如stackoverflow中所述)


EF是L2的一个超级集合,为您提供了更大的使用灵活性和dbms独立性

看看它为什么在变化,看看您是否能够预测和概括即将发生的各种变化,以便它们不会破坏您的代码


框架可能会使适应更改变得更容易,但更深入的分析会带来更长期的好处

任何解决方案都可以工作,您真正需要的是一组测试,这些测试将确保插入、选择、更新和删除等基本操作正常工作。通过这种方式,您只需运行测试并检查映射是否是最新的。

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


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

使用EntitySpaces。你一定会给我送花的。
简直太棒了。根据需要更改数据库。按一下按钮,砰。所有更改都已完成。无需更改自定义代码。我喜欢它。

这个应用程序有多简单?如果我要在几个月内处理模式/设计的东西,而不是真的担心实际的应用程序。我将考虑使用EDM和动态数据实体Web应用程序项目。在我看来,这是你用最少的努力就能完成的。这使您能够专注于模式、数据和其他groovey内容。我希望这次不会有太多的负碰撞


下面是新建项目对话框的外观

如果使用linq2sql设计器的“拖放”方法,我发现重构代码有点困难。然而,使用Fluent-NHibernate,这可能很容易解决。Fluent-NHibernate使编写集成测试变得容易