.net 有没有理由将数据集与SQL Server CE的本地数据库一起使用?

.net 有没有理由将数据集与SQL Server CE的本地数据库一起使用?,.net,database,ado.net,dataset,sql-server-ce,.net,Database,Ado.net,Dataset,Sql Server Ce,即使在使用本地进程内数据库进行应用程序数据持久化的应用程序中,使用.NET数据集也有意义吗 如果数据集主要用于数据库结果的内存缓存,那么当使用与应用程序在同一进程中运行的SQL Server Compact local database之类的东西时,它们似乎没有那么大的好处 使用类型化数据集还有其他原因吗?比如说,它们是否简化了WPF数据绑定?我已经从应用程序中删除了所有类型化的数据集。创建它们需要太长时间。我所说的创建是指新的语句/构造函数。此外,检索数据的效率不如直接使用DataReader

即使在使用本地进程内数据库进行应用程序数据持久化的应用程序中,使用.NET数据集也有意义吗

如果数据集主要用于数据库结果的内存缓存,那么当使用与应用程序在同一进程中运行的SQL Server Compact local database之类的东西时,它们似乎没有那么大的好处


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

我已经从应用程序中删除了所有类型化的数据集。创建它们需要太长时间。我所说的创建是指新的语句/构造函数。此外,检索数据的效率不如直接使用DataReader

不知道对进程内数据库的大量查询(使用DataReader)是否会使你的应用程序运行速度慢很多。我想这取决于你的申请


通常,缓存数据比解析额外的SQL语句和检索信息更快。但是,额外的内存也是有代价的。

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

在我看来,数据集是为如下用例设计的:

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

  • 对于本地进程内数据库,不需要完全脱机工作——本地数据库连接始终可用。这意味着无需(潜在地)将复杂的数据库关系建模到本地缓存中以启用添加、删除和更新。相反,可以直接修改数据库中的数据,并且只维护用于查看数据的自定义本地缓存。本地缓存可以与DB层分离,并放入其自己的ViewModel层(MVVM)。

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

    谢谢!我一直在研究SqlCeResultSet,认为它可以方便地绑定到WPF,而不需要任何数据集。我想我只需要在实践中尝试一下,看看我的表现如何。