smithsson68@gmail.com
Jun 8, 2010
  8408
(1 votes)

Storing EPiServer CMS Properties in the Dynamic Data Store

I had the pleasure of talking to Anders Hattestad, one of our esteemed EMVP’s, when I was at the EPiServer Partner Summit 2010.

One of the things he raised was why the Dynamic Data Store didn’t have built-in support to store EPiServer CMS Properties in their native CLR data type: E.g. A PropertyBoolean should be stored ‘inline’ as a boolean and not as a reference object.

There are 2 reasons for this:

  1. The Dynamic Data Store is part of the EPiServer Framework which is completely independent of CMS and therefore contains no references to any CMS assemblies.
  2. We screwed up! Yes, you heard me. We should of course have added this functionality to the CMS 6.0 code.

To remedy this situation ‘tout de suite’ I have written a few classes that can be downloaded and added to your EPiServer CMS solutions.

The classes implement the EPiServer.Data.Dynamic.ITypeHandler interface which allows exactly for this type of scenario: To map a property of a class which is in itself a class and would normally be stored as a reference type to an inline data type. Inline data types are those that can be mapped directly to SQL Server / Oracle columns (integers, floating point numbers, strings, dates, Guids, booleans, byte arrays).

CmsPropertyDdsTypeHandler Class

This maps the core CMS PropertyData derived classes to their inline CLR equivalents (PropertyString to String, PropertyDate to DateTime etc). Feel free to add your own properties in here but bear in mind that they must map to one of the CLR Types that the DDS defines as inline. See the “Inline” section in the Dynamic Data Store Documentation on EPiServer World.

DdsTypeHandler Class

This a generic class that gives the ability to specify a mapping from one Type to another. For example to specify that a PageReference instance should be stored as a string in the DDS:

   1:  new DdsTypeHandler<PageReference, string>(
   2:  (value) =>
   3:  {
   4:       return value.ToString();
   5:  },
   6:  (value) =>
   7:  {
   8:        return PageReference.Parse(value);
   9:  });

DdsInitialization

This is an example initialization module that creates an instance of the CmsPropertyDdsTypeHandler class and also registers a handler for PageReference using the DdsTypeHandler class. The class also has placeholder methods for creating and remapping stores which you may find useful. I will blog more about these subjects in the future. You can read more about initialization modules in the Initialization Documentation on EPiServer World.

The example classes can be download here.

Jun 08, 2010

Comments

Sep 21, 2010 10:33 AM

Cool, but actually the dynamic datastore do handle PageReference as an inline type :)
But the same thing here is easy to use with PropertyPageReference or other stuff.. Thanks a lot, and looking forward to check this more out.
/ Anders Hattestad

Please login to comment.
Latest blogs
Optimizely CMS 13 and the Alloy demo site

The Alloy demo site now runs on Optimizely CMS 13. Here’s a quick guide to getting it up and running locally.

Tomas Hensrud Gulla | Apr 10, 2026 |

A day in the life of an Optimizely OMVP: Getting Up to Speed with Optimizely CMS 13 — A Free Learning Path

If you're working with Optimizely and haven't started exploring CMS 13 yet, now's the time. I've put together a dedicated CMS 13 course within the...

Graham Carr | Apr 10, 2026

A day in the life of an Optimizely OMVP: Optimizely CMS 13 Is Here: The Features, The Add-Ons, and What's Coming Next

CMS 13 went GA on 31st March 2026, and after months of previews, webinars, and internal engineering sessions, it's finally real. I've been deep in...

Graham Carr | Apr 10, 2026

How to get the Page Tree back in Optimizely CMS

Lost the page tree in Optimizely CMS? Here's why it happens and the non-obvious fix to get it back.

Henning Sjørbotten | Apr 10, 2026 |