有没有使用DataSet与本地数据库与SQL Server CE的原因?

时间:2009-01-22 08:54:41

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

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

如果DataSet主要用于数据库结果的内存缓存,那么当使用与应用程序在同一进程中运行的SQL Server Compact本地数据库时,听起来好像不太有用。

使用键入的DataSet还有其他原因吗?说,它们是否可以简化WPF数据绑定?

3 个答案:

答案 0 :(得分:2)

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

在我看来,DataSet是为诸如此类的用例而设计的:

  1. 数据从远程数据库加载到内存缓存(DataSet)。
  2. 在没有与数据库的活动连接的情况下,以非平凡的方式(多个表,删除,添加,更新)操作缓存的副本。
    • 需要将数据库关系建模到本地缓存中以启用这些操作。
    • 与UI的数据绑定(例如,WPF)是微不足道的,因为我们正在处理数据的内存中副本。
  3. 有时会将缓存副本更新到远程数据库以获得真正的持久性。
    • 例如,当客户端返回在线状态或用户按“Apply”以真正提交其数据时,可能会发生这种情况。
  4. 使用本地进程内数据库,无需完全脱机工作 - 本地数据库连接始终可用。这表明,建立(可能)复杂的DB关系到本地缓存中以启用添加,删除和更新是不必要的。相反,可以直接修改数据库中的数据,并仅维护用于查看数据的自定义本地缓存。本地缓存可以与DB层分离并放入其自己的ViewModel层(MVVM)。

答案 1 :(得分:0)

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

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

大多数情况下,缓存数据以解析额外的SQL语句并检索信息的速度更快。但是,它所需的额外内存也需要付出代价。

答案 2 :(得分:0)

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