smithsson68@gmail.com
Jun 8, 2010
  8376
(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
AEO/GEO: A practical guide

Search changed. People ask AI tools. AI answers. Your content must be understandable, citable, and accessible to both humans and machines. That’s...

Naveed Ul-Haq | Feb 17, 2026 |

We Cloned Our Best Analyst with AI: How Our Opal Hackathon Grand Prize Winner is Changing Experimentation

Every experimentation team knows the feeling. You have a backlog of experiment ideas, but progress is bottlenecked by one critical team member, the...

Polly Walton | Feb 16, 2026

Architecting AI in Optimizely CMS: When to Use Opal vs Custom Integration

AI is rapidly becoming a core capability in modern digital experience platforms. As developers working with Optimizely CMS 12 (.NET Core), the real...

Keshav Dave | Feb 15, 2026

Reducing Web Experimentation MAU Using the REST API

Overview Optimizely Web Experimentation counts an MAU based upon the script snippet rendering for evauluation of web experiement. Therefore when yo...

Scott Reed | Feb 13, 2026