Entries:
Comments:
Posts:

Loading User Information from Channel 9

Something went wrong getting user information from Channel 9

Latest Achievement:

Loading User Information from MSDN

Something went wrong getting user information from MSDN

Visual Studio Achievements

Latest Achievement:

Loading Visual Studio Achievements

Something went wrong getting the Visual Studio Achievements

IWP71 | NoSQL

Download

Right click “Save as…”

This week we are meeting again with our big friend Rob Tiffany. This time we talk about NoSQL. It's an easy way to store your data offline on your phone. During this conversation Rob explains what NoSQL is, why you would use it and what the challenges are.

Below are the code samples how to perform the CRUD operations on your in memory classes.

Define Table schema (Entity)

publicsealedclassCustomer
{
    publicint CustomerId { get; set; }
    publicstring FirstName { get; set; }
    publicstring LastName { get; set; }
}

Define Table (Generic List to hold collection of Customer objects)

publicstaticList<Customer> Customers { get; set; }

Create Table

Customers = newList<Customer>();

Save Table

publicstaticasyncTask SaveChanges<T>(T collection, String tableName)
{
    var file = awaitApplicationData.Current.LocalFolder.CreateFileAsync(tableName, CreationCollisionOption.ReplaceExisting);
    var outStream = await file.OpenStreamForWriteAsync();
    var serializer = newDataContractJsonSerializer(typeof(T));
    serializer.WriteObject(outStream, collection);
    await outStream.FlushAsync();
    outStream.Dispose();
}

Calling the Save Table Method

await SaveChanges<List<Customer>>(Customers, "Customer");

Load Table

publicstaticasyncTask<T> LoadTable<T>(string tableName)
{
    StorageFile file = awaitApplicationData.Current.LocalFolder.GetFileAsync(tableName);
    Stream stream = await file.OpenStreamForReadAsync();
    DataContractJsonSerializer serializer = newDataContractJsonSerializer(typeof(T));
    T table = (T)serializer.ReadObject(stream);
    stream.Dispose();
    return table;
}

Calling the Load Table Method

Customers = await LoadTable<List<Customer>>("Customer");

Insert Customers

Customers.Add(newCustomer
{
    CustomerId = 1,
    FirstName = "Andy",
    LastName = "Wigley"
});

Update Customers

foreach (var item in Customers.Where((c) => c.CustomerId == 2))
{
    item.FirstName = "Mike";
}

Delete Customers 

Customers.RemoveAll((c) => c.CustomerId == 2);

Select Customers

var query = from c inTableService.Customers
            select c;
 
CustomersList.ItemsSource = query.ToList();

Tweet to @robtiffany or @mahoekst

Tag:

Follow the Discussion

  • Cool topic. It took me a while to realize that all there seems to be about this approach is in the SaveChanges/LoadTable methods provided.

  • Yves Schelpe (KdG)YvesSchelpe​KdG Analist / Programmer & Musician

    Nice, I like this topic.
    Thanks for the code examples & the overview video.

    Please provide some more context for other (LOB), Website applications though.
    Or apps that need to log a lot, these could benefit a lot from NoSQL approach.

    How should we setup, which products does MS provide? Is there a whitepaper on setting these things up, outside WP.

  • Thanks,

    What do you mean by other (LOB), Website applications?

  • Like the title "IWP71" --> WP 7.1

Remove this comment

Remove this thread

close

Comment on the Post

Already have a Channel 9 account? Please sign in