【问题标题】:Any reason to use DataSets with Local Databases with SQL Server CE?有什么理由使用带有 SQL Server CE 的本地数据库的数据集?
【发布时间】:2010-10-02 21:05:54
【问题描述】:

即使在使用本地进程内数据库进行应用程序数据持久性的应用程序中使用 .NET 数据集是否有意义?

如果 DataSet 主要用于数据库结果的内存缓存,那么在使用与应用程序在同一进程中运行的 SQL Server Compact 本地数据库之类的东西时,它们听起来并不是那么有用。

还有其他使用类型化数据集的理由吗?比如说,它们是否简化了 WPF 数据绑定?

【问题讨论】:

    标签: .net database ado.net dataset sql-server-ce


    【解决方案1】:

    让我试着回答我自己的问题。

    在我看来,DataSet 是为以下用例设计的:

    1. 数据从远程数据库加载到内存缓存(DataSet)。
    2. 缓存副本以非平凡方式(多个表、删除、添加、更新)进行操作,无需与数据库建立活动连接。
      • 需要将数据库关系建模到本地缓存中以启用这些操作。
      • 数据绑定到 UI(例如 WPF)很简单,因为我们正在处理数据的内存副本。
    3. 缓存副本有时会更新到远程数据库以实现真正的持久性。
      • 例如,当客户端返回在线状态或用户按下“应用”以真正提交他的数据时,可能会发生这种情况。

    使用本地进程内数据库,无需完全脱机工作——本地数据库连接始终可用。这表明没有必要将(可能)复杂的数据库关系建模到本地缓存中以启用添加、删除和更新。相反,人们会直接修改数据库中的数据,并且只维护一个自定义的本地缓存来查看数据。本地缓存可以与 DB 层解耦,放入自己的 ViewModel 层(MVVM)中。

    【讨论】:

      【解决方案2】:

      我已从我的应用程序中删除所有类型化的数据集。创建它们需要很长时间。通过创建,我的意思是新的语句/构造函数。此外,检索数据不如直接使用 DataReaders 高效。

      不知道对进程内数据库的许多查询(使用 DataReader)是否会使您的应用程序变慢很多。我认为这取决于您的应用程序。

      大多数情况下,缓存数据比解析额外的 SQL 语句和检索信息更快。但话又说回来,它需要的额外内存也是有代价的。

      【讨论】:

      • 谢谢!我一直将 SqlCeResultSet 视为一种无需 DataSet 即可轻松绑定到 WPF 的方法。我想我只需要在实践中尝试一下,看看我能得到什么样的性能。
      【解决方案3】:

      您可以使用 SQL Server Compact 轻松对应该与 SQL Server 一起使用的应用程序进行单元测试。 如果没有 Sql server compact,您的测试是集成测试而不是单元测试(更难配置并且需要更多时间运行)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-06
        • 1970-01-01
        • 1970-01-01
        • 2020-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多