Thursday, May 26, 2011

Simplifying use of SQL CE in Mango #WP7Dev (1 of n)

One of the features that the "Mango" tools introduce for Windows Phone development is a built in SQL Compact Edition (SQL CE) database. While learning about how to use it I was struck by how much better the experience could be.

As such, here is the first in what I hope will be a series of pointers and tips for making working with a database easier.

If you want to learn more about using SQL CE with Windows Phone codename "Mango" then I also recommend you check out the following on MSDN:
How to: Create a Basic Local Database Application for Windows Phone
and
Hands-On-Lab: Using local database in To-do application



When working with a database it's good practice to persist any changes to the datacache as quickly as possible. This means you'll probably end up doing something like this:
  db.MyItems.InsertOnSubmit(myNewItemInstance);
  db.SubmitChanges();
or this:
  db.MyItems.DeleteOnSubmit(anItemInstance);
  db.SubmitChanges();
quite a lot.

The only reason you may not want to do the above (Calling `SubmitChanges` after every call to `XxxxxOnSubmit()`) is if you were performing a number of insertions or deletions in a loop. In this case it may be wise (more performant) to call `SubmitChanges()` at the end.

When looking at even a short amount of code that does insertions or deletions it strikes me that there is a lot of duplication and that if those functions are always called together then it may make sense to bundle them up into a single function.

As it may not be immediately obvious how to do this (I had to explore a couple of options before I ended up with this), I present a simple class with some extension methods which does just that:

public static class TableExtensions
{
  public static void InsertAndSubmitChanges(this Table table, T entity) where T : class
  {
    table.InsertOnSubmit(entity);
    table.Context.SubmitChanges();
  }

  public static void DeleteAndSubmitChanges(this Table table, T entity) where T : class
  {
    table.DeleteOnSubmit(entity);
    table.Context.SubmitChanges();
  }
}  

By using the above class, it means that where we were previously having to write 2 lines of code we can now just write 1 and still get the same functionality!

  db.MyItems.InsertAndSubmitChanges(myNewItemInstance);

  db.MyItems.DeleteAndSubmitChanges(anItemInstance);  

I hope this helps you write less code. (In a good way of course.)
Please let me know if you find this helpful.

Consumer features coming in Mango

I'm sorry but this is more shaky video. I hope you can cope.

Nick Hedderman demonstrates some of the new features coming in Mango.
Communications


Apps


Web

Wednesday, May 25, 2011

Move aside and let the MANGO through!

If you're interested in Windows Phone 7 development and were offline, for whatever reason, today or have been sleeping under a rock, you may have missed that the Beta version of the next version of the Windows Phone 7 development tools (codename "Mango") were released today.


You can read more details at http://windowsteamblog.com/windows_phone/b/wpdev/archive/2011/05/24/developer-news-beta-mango-tools-available-today.aspx then get it from http://create.msdn.com/en-US/news/WPDT_7.1_Beta

Check out this video (sorry it's a bit wobbly-I hope you don't get sea sick watching it) to see what was said at the launch.

Tuesday, May 03, 2011

WP7 OS Version numbers

For my own reference and because I couldn't find anywhere else where this had been documented. Here are the different OS Version numbers for each of the WP7 releases/updates.

7.0.7004.0 - Original public release
7.0.7008.0 - "Pre-Nodo" update (contained changes to support the NoDo update)
7.0.7390.0 - NoDo (No-Donuts) update (included performance improvements and cut and paste)
7.0.7392.0 - Security update

Update: See http://www.microsoft.com/windowsphone/en-us/howto/wp7/basics/update-history.aspx