2012-02-07 4 views
0

私はSync Framework SilverlightプロジェクトのクライアントサイドデータベースエンジンにSiaqodbを使用しています。私はsiaqodbに切り替えました。これは、Microsoftのクライアント側ソリューションがデータベース全体を一度にメモリにロードするため、大きなデータを処理するのが難しいためです。メモリリスト内の更新されたアイテムを識別する最善の方法は何ですか?

私はSiaqodbOfflineEntityオブジェクトのリストをSilverlightデータグリッドにバインドして、編集可能なDataGridを作成しました。 Microsoftのソリューションとは異なり、データベースエントリを直接データグリッドにバインドすることはできません。データベースをクエリし、メモリオブジェクトのリストをDataGridにバインドする必要があります。これは、データグリッドセルが変更されたときにデータベースが即時に更新されないという問題を引き起こす。私は、セルの変更後にデータベースへの更新を処理する最善の方法を見つけることを試みています。オブジェクトに変更が加えられていなくても、siaqodbエンジンがアイテムをダーティとマークするので、各アイテムをデータベースに更新するだけではありません。これにより、同期しようとすると競合が発生します。元のリストのキャッシュされたバージョンを保持し、各オブジェクトの各プロパティを比較してどのオブジェクトが変更されているかを調べることは、うまくいくようですが、ちょっと面倒なようです。私もいくつかのdatagridsイベントを見てみましたが、RowEditEndedはセルが編集され、CurrentCellChangedが行(奇数)を切り替えるたびに発生するように見えます。

これに対して、より良い解決策があるはずです。誰でもアイデアはありますか?

+0

「Microsoftのクライアント側のソリューションは、データベース全体を一度にメモリにロードします」と私は懐疑的だが、私はあなたの主張が真実であると真剣に疑う。 http://msdn.microsoft.com/en-us/sync/bb887608 sync fxは変更の追跡を使用するため、クライアント側のローカルDBのサブセットのみにデータバインドする必要があります。 –

+0

問題はSilverlightと、Isolated Storageを使用するMicrosoftのクライアント側の同期プロバイダです。データベースのサブセットをバインドする場合でも、データベース全体がメモリにロードされます。詳細はこちらをご覧ください:http://social.msdn.microsoft.com/Forums/en-US/synclab/thread/ad1ab1ac-0c4c-4856-88b6-81b8bae4d71b/ – dregan

答えて

0

私はiNotifyPropertyChangeを実装するためにオフラインエンティティクラスを変更することでこれを実現しました。これは合理的な解決策だと思います。 PropertyChangedイベントをオブジェクトをデータベースに保存する関数に設定します。 notifypropertyweaverというVSパッケージがあり、コンパイル時にこのコードを挿入し、自動生成されたエンティティコードで実行する必要がある作業量を削減します。

関連する問題