【问题标题】:What is the best way to identify updated items in an in memory list?识别内存列表中更新项目的最佳方法是什么?
【发布时间】:2012-02-07 16:40:36
【问题描述】:

我在 Sync Framework silverlight 项目中将 Siaqodb 用于我的客户端数据库引擎。我已切换到 siaqodb,因为 microsoft 的客户端解决方案一次将整个数据库加载到内存中,因此很难处理大数据。

我已将 SiaqodbOfflineEntity 对象列表绑定到 silverlight 数据网格,以创建可编辑的数据网格。与微软的解决方案不同,您不能将数据库条目直接绑定到数据网格。您必须查询数据库并将内存对象列表绑定到数据网格。这会导致一个问题,即在更改数据网格单元格时数据库不会立即更新。我试图找到在单元格更改后处理数据库更新的最佳方法。我不能只将每个项目更新到数据库,因为 siaqodb 引擎会将项目标记为脏,即使没有对对象进行任何更改。这将在尝试同步时导致冲突。持有原始列表的缓存版本,然后比较每个对象的每个属性以查找哪些已更改,这似乎可行,但似乎有点麻烦。我也尝试查看一些数据网格事件,但 RowEditEnded 在编辑单元格时似乎不会触发,而 CurrentCellChanged 似乎在我切换行时触发(奇数)。

必须有更好的解决方案。有人有什么想法吗?

【问题讨论】:

  • "microsoft 客户端解决方案一次将整个数据库加载到内存中" 请原谅我的怀疑,但我严重怀疑您的说法是否属实。 msdn.microsoft.com/en-us/sync/bb887608 同步 fx 使用更改跟踪,无论如何,您应该只在客户端将数据绑定到本地数据库的一个子集。
  • 问题出在 Silverlight 和使用独立存储的 Microsoft 客户端同步提供程序上。即使绑定数据库的一个子集,整个数据库也会加载到内存中。更多信息可以在这里找到:social.msdn.microsoft.com/Forums/en-US/synclab/thread/…

标签: silverlight syncfx


【解决方案1】:

所以我通过更改我的离线实体类来实现 iNotifyPropertyChange 来实现这一点,我认为这是一个合理的解决方案。我将 PropertyChanged 事件设置为将对象保存到数据库的函数。有一个名为 notifypropertyweaver 的 VS 包将在编译时注入此代码,从而减少自动生成的实体代码所需的工作量。

【讨论】:

    猜你喜欢
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 2014-05-12
    • 2011-09-15
    • 1970-01-01
    相关资源
    最近更新 更多