【问题标题】:Best "current" MS data access technology for loose coupled constantly changing code?用于松散耦合不断变化的代码的最佳“当前”MS 数据访问技术?
【发布时间】:2026-01-09 22:45:02
【问题描述】:

我在我的项目中做了很多非类型化的数据集工作,并且已经这样做了一段时间,但是在使用 datagridview 的就地编辑时,我发现如果使用类型化数据集,验证和填充会容易得多。

这带来了一个问题,因为我不喜欢使用那些数据集设计器来创建强类型的数据表/数据集。与未键入数据集相比,键入数据集时更难进行简单的更改。有类型的数据集更改需要安装 VS 的副本,而无类型的不需要。我可以更改数据库服务器上的 sql 视图,应用程序将在我的网格中显示新列。他们可能无法使用新列,但我的大部分内容都是信息显示,所以没关系。

我查看了实体框架,但看起来也必须运行一些向导来构建您的数据模型。我并不反对数据模型,但如果它能够在运行时生成,这样对数据库的新更改就不需要重新编译软件,那就太好了。

有快乐的媒介吗?还是我在启动时无法创建无类型数据表一段时间?

【问题讨论】:

    标签: dataset strong-typing


    【解决方案1】:

    当然,这完全是个人喜好问题,但我发现数据集是万恶之源
    好吧,也许不是 all 邪恶的,但它们代表了一个没有与之关联的行为的数据结构 => 它们不是对象(如 OOP 中定义的那样)=> 使用它们促进非 OOP 风格的编程(更不用说过程编程)。

    其他几点:

    1. gridviews 和任何其他控件完全支持绑定到对象列表(而不仅仅是数据集)。
    2. 我认为,如果您必须对数据模型进行更改,安装 VS 的副本并没有太多要求。
    3. 同理——当您更改数据模型时,必须重新编译您的代码也不是一个夸张的要求。
    4. 如果,当您更改数据库中的表时,会强制更改您的 UI,我会说它不是“松散耦合”,无论想象如何。

    我认为使用数据集的唯一理由是从数据库中提取数据,然后将其传输到对象中。
    但是现在,如您所知,如果这不是必需的 - 您有 ORM 可以为您完成这项工作(EF 是一个,nHibernate 是另一个更好的选择)。

    所以,总而言之,我强烈建议您重新考虑使用 DataSet,因为它们违背了面向对象的基础知识。

    附言
    抱歉,如果这有点情绪化 - 我是从痛苦的个人经历中说出来的。
    两年来,我一直在努力工作,因为我正在开发的应用程序完全使用了 DataSet,这意味着我们也必须完全复制这些数据的行为。呃……

    【讨论】:

    • sJhonny,我对数据集的使用完全基于它易于重用且与 OO 无关。我有一个在项目之间使用的 sql 类,它为我返回无类型的东西。我唯一与列表打交道的是玩 wpf 几个星期。我会接受你的建议,看看我能不能对他们做点什么。在这一切中,我的目标是设计一种简单、可教和可重用​​的方法(最少的配置工作)来进行 datagridview 就地编辑。
    • @Twood:那么我们同意-“使用数据集..与 OO 无关”:)。我相信 OO 是一个不容妥协的重要原则。任何谷歌搜索都会为您提供许多资源,说明为什么会这样。希望我已经做了一些事情来说服你......
    • 我已经解决了我的问题。不过仍然使用数据表。我的对象无论如何都不复杂,使用它们的应用程序只是用于数据库编辑的 gui。花时间为所有这些东西定义特殊的对象和接口并不能真正给我买任何东西。是的,我意识到它不是面向对象的推广,而是浪费了很多时间,迫使事情进入可能不需要的模式。我来自 PLC 背景,所以我的逻辑结构与大多数人不同。
    最近更新 更多