我目前正在构建一个小型 CRUD 应用程序。他们的数据库非常混乱,并且在接下来的 6 个月到一年内会频繁更改。您对我的数据层有何建议:

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

2)Linq2Sql

3)存储过程

4) 参数化查询

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

笔记:我对 ORM 没有太多经验(只有一点 SubSonic),并且通常倾向于使用存储过程,所以也许这就是正确的选择。我很想学习 Ling2Sql 或 NHibernate,如果它们能够满足我上面描述的情况的话。

有帮助吗?

解决方案

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

这也是存储过程的问题。

使用 Linq2Sql 的优势在于,当您在编译时更改架构时,您可以准确地了解代码的具体问题所在。对我来说,如果我正在使用经常更改的模式,那么这将优先于其他所有事情

其他提示

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

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

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

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

为了以相反的方式来做(例如,你有一堆表,然后你的对象设计基于它)我发现 我这一代 + NHibernate 来工作,尽管我对生成的类不太满意(主要是因为我是真正的面向对象编程的坚持者)。

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

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

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

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

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

应用程序有多简单?如果我要处理模式/设计的东西几个月,而不是真正担心实际的应用程序。。。我会考虑使用 EDM 和动态数据实体 Web 应用程序项目。在我看来,这可以让你以最少的努力完成任务。这可以让你专注于模式、数据和其他棘手的事情。我希望这不会给我带来太多负面影响!

新项目对话框如下所示

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

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top