2012-02-07 41 views
0

我在同步框架silverlight项目中为我的客户端数据库引擎使用Siaqodb。我已经切换到siaqodb,因为microsofts客户端解决方案一次将整个数据库加载到内存中,因此,处理大量数据很困难。在内存列表中标识更新项目的最佳方法是什么?

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

有一个更好的解决方案。有人有主意吗?

+0

“微软客户端解决方案立即将整个数据库加载到内存中”请原谅我的怀疑态度,但我严重怀疑您的声明是否属实。 http://msdn.microsoft.com/en-us/sync/bb887608同步fx使用更改跟踪,并且您应该只在您的客户端数据绑定到本地数据库的子集。 – 2012-02-07 16:51:38

+0

问题在于使用孤立存储的silverlight和Microsoft客户端同步提供程序。即使在绑定数据库的一个子集时,整个数据库也会加载到内存中。更多信息可以在这里找到:http://social.msdn.microsoft.com/Forums/en-US/synclab/thread/ad1ab1ac-0c4c-4856-88b6-81b8bae4d71b/ – dregan 2012-02-07 17:34:51

回答

0

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

相关问题