8

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

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

2)Linq2Sql

3) 存储过程

4) 参数化查询

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

注意:我对 ORM 没有太多经验(只有一点 SubSonic),并且通常倾向于使用存储过程,所以也许这就是要走的路。我很想学习 Ling2Sql 或 NHibernate,如果两者都允许我上面描述的情况。

4

12 回答 12

6

这里要注意的一件关键事情是,如果数据库模式经常更改,您希望具有某种程度的编译时类型安全性。我发现这是 NHibernate 的一个问题,因为它使用 xml 映射文件,因此如果您更改数据库模式中的某些内容,直到运行时您才知道映射已损坏。

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

使用 Linq2Sql 的优势在于,当您在编译时更改架构时,您可以知道代码到底在哪里中断。对我来说,如果我正在使用经常更改的架构,这将优先于其他所有事情

于 2008-08-15T03:37:32.430 回答
5

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

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

于 2008-08-15T03:57:06.273 回答
2

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

于 2008-09-16T18:40:41.747 回答
1

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

反过来做(例如,你有一堆表,然后你的对象设计以此为基础)我发现MyGeneration + NHibernate 可以工作,尽管我对结果类不太满意(主要是因为我是真正的面向对象编程的忠实拥护者)。

于 2008-08-15T02:00:55.353 回答
1

如果我站在你的立场上,我会尝试将我所知道的(存储过程)与 Linq2Sql 结合起来。Linq2Sql 仍然可以使用你的存储过程,但是你有一个额外的好处,那就是在你的腰带上放一个新工具。我认为掌握 Linq2XXX(X 是一种随机技术而不是成人娱乐......现在我认为这不是一个坏主意)语法和方法将成为你使用技能的一个很好的补充在对象集合上的 Linq 非常甜蜜。

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

于 2008-08-19T16:54:48.487 回答
1

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

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

于 2009-01-23T14:30:23.527 回答
1

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

于 2010-05-08T21:09:21.907 回答
1

应用程序有多简单?如果我要在几个月内使用架构/设计的东西,而不是真正担心实际的应用程序。. . 我会考虑使用 EDM 和动态数据实体 Web 应用程序项目。在我看来,这可以让你以最少的努力去做。这让你专注于模式、数据和其他时髦的东西。我希望不会从这个中得到太多的负面影响!

新项目对话框如下所示

于 2010-05-08T22:00:21.673 回答
0

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

于 2008-08-15T02:05:46.747 回答
0

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

EF 是 L2S 的超集,为您提供更大的使用灵活性和 dbms 独立性

于 2008-09-16T18:54:35.160 回答
0

看看它为什么会发生变化,看看你是否可以预测和概括即将发生的变化类型,这样它们就不会破坏你的代码

框架可能使适应变化更容易,但更深入的分析将有长期的好处

于 2008-12-17T19:06:27.783 回答
0

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

于 2008-12-17T19:13:22.137 回答