Show scripts or look at triggers in db. Homework assignment: See how SS knows the .sdf has changes to upload to server. No SS 2008 to look at the schema or attach to Profiler.
Auto-incrementing integer can cause inserting into client and server with the same primary key
I was using bigint as the PK, Unique Identifier. This led to intermittent results. Use Guid instead. Apparently SQL CE *doesn’t* support server generated ID’s.
Designing For Occasionally Connected Apps Slideshare
Local Database Caching with the Microsoft Sync Framework
presented to NUFWon 11/10/2009
DESIGNING APPLICATIONS FOR
THE OCCASIONALLY CONNECTED
Work for Systemental, Inc as a Consultant
and Software Developer
Software development to support Corporate
business process improvement since 2000
(Lean or Continuous Improvement Initiatives)
.Net since 2004
Mfg. Eng. Technology degrees from Ball State
A case study in failure
What could go wrong preparing this
Initial demo worked in minutes (after about three
SQL CE debugging challenges
1. Refactor - created numerous problems
2. Test - find problems requiring schema changes
3. Repeat 1-2 ad nauseum
What we will cover
What is the Microsoft Sync Framework?
How you can use it?
How does it work?
How do you implement it?
Gotcha’s, gotcha’s, and debugging
What is the Sync Framework
Provider-based API for synchronizing data or
files across multiple applications, services,
and physical devices
Web – RSS/Atom
How can it be used?
Server to Local
Local to Server
Why not pub/sub, log shipping, replication?
Argument: Internet is everywhere and growing
CE vs. Express
Encrypt or password protect the file
Document-safe, no code stored in file
Light 1.8Mb vs. 58Mb
How does it work?
Visual Studio local database cache template
Schema changes (couple fields and
Triggers or 2008 Change data capture
Demo project details
WPF application with a single keystroke input
Changing background color (green, yellow,
red) based on actual count vs. target count
Two dispatcher timers:
1. Screen display color update (every second)
2. Db synchronization (every minute)
WinForm SQL CE cache table viewer
Using Repository pattern and Linq to SQL
Existing SQL db, switch to CE 3.5 using
provider and connection string change
Server to local sync (default)
local to server sync/bi-directional (code-
Visual Studio Linq2SQL template doesn’t support SQL CE
provider – use SQLMetal to generate, then include in project
LINQ dbml created from MSSQL, not compatible CE
SSMS 2005 would not open a CE 3.5 .sdf file. Need SSMS 2008
Set sync direction if anything other than server to local
Changing schema’s after generation – remove everything and
start over (use sql scripts to roll back)
Insert/Update triggers not auto created?
.sdf is re-initialized to empty and copied to bin/debug if newer
Existing triggers on the table
Gotcha’s – primary key
Primary key defined on table to cache
auto-incrementing integer primary key,
unique identity with SQL CE db
Some table defaults like newid() for
MSSQL Uniqueidentifer field do not
transfer to the .sdf schema definition. Set
in code <table>.id=Guid.NewGuid
Linq can’t autogenerate guid on server.
Use id=Guid.NewGuid in code
Debugging SQL CE 3.5
• SSMS 2005 gives the following error when you try to connect to a SQL CE 3.5 .sdf file.
• Created a WinForm project PeekLocalCache to display data from .sdf file. Caution: make sure
you know which .sdf file the app is using (bin/debug, bin/release, project)
• SSMS 2008 – hopefully works
• Be careful re-creating the .sdf file using the local database cache configuration wizard
without deleting the records from the Server table.
I cleared out the Server table and ran for
a while on 11/2 without ex, on 11/3
cleared out the table and ran for 13
records. Changing to update server
table, works. Violation is in local cache
Sorry, not covering in Demos
Enums – conflict types (between sync sessions)
ClientInsertServerInsert - A new row is created with the same
ClientUpdateServerUpdate - The same row is updated. Most
ClientUpdateServerDelete - A row is updated on the client but
was deleted on the server.
ClientDeleteServerUpdate - A row is deleted on the client but
was updated on the server.
ErrorsOccurred – all others
Methods for handling
Specified replica wins
Last writer wins
Log it or defer