2012-05-02

PropertyData object with name "FooBar" already exists


I ran into this during the weekend while I did some work from home. The site I was working on is running EPi6r2 with PageTypeBuilder and I was just adding a couple of new properties for a page type when I suddenly and unexpectedly got the yellow screen of death exception message thrown a me. I couldn't access any page, nor the edit or admin modes.

Googling a little, there was some talk on forums and blogs about the problem being related to language handling and such but none of the things I found applied to my situation.

...so I started tracing the origin of the exception back through Reflector and ended up in EpiServer.Core.PropertyDataCollection:

public void Add(string name, PropertyData value)
{
    this.InternalApproveObject(name, value);
    if (base.BaseGet(name) != null)
    {
        throw new ApplicationException("PropertyData object with name \"" + name + "\" already exists");
    }
    value.Parent = this;
    base.BaseAdd(name, value);
}

EPi, rightfully I might add, detected that I had added more than one property with the same name. (On a side note, I can think of a bunch of more pleasant behaviors to handle property doublets than to just throw an Application Exception; use the first (lowest id) and automatically remove the clones, rename the clones using a prefix or suffix, etc.). How could I add several properties with the same name on the same page type? To be honest I'm not exactly sure but I think this is what might have happened:

First off, at the time I was on a fairly slow Wifi connection, running the site locally but connecting it to a remote database over VPN. The fact that, after compiling. I hit the reload button in Chrome for both the site, edit mode and admin mode in three different tabs pretty much at the same time probably also contributed since, iirc, they each run as a separate application. Delays in contact with SQL probably enabled PTB to insert multiple copies of the same property from the different applications in question.

Once I figured this out it was easy enough to manually edit out doublets from tblPageDefinition in the database and the site would work as expected again.

2012-04-28

Note to self: DropCreateDatabaseIfModelChanges during development

While developing using Entity Framework, code first, I should add the following to Global.asax:

protected void Application_Start()
{
    #if DEBUG
    Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DbCtx>());
    #endif
}
That way, given that that the models have changed, when I am running the application in debug mode, the database will be dropped and recreated.

2012-03-07

Reflections from taking the EPiServer (CMS 6) Certified Developer exam

I passed the exam earlier today and thought I should share some reflections. The test wasn't really that difficult but it was very broad. On top of actual questions regarding programming it ranged from the product as such (almost bordering on sales talk at times) to configuring and licensing.

2012-02-21

Programmatically adding options to EPi CMS 6 R2 drop-down list property when using PageTypeBuilder 2.0

Since EPi CMS had property types with custom settings added I have found the drop-down list (EPiServer.SpecializedProperties.PropertyDropDownList) especially useful for allowing an editor to choose from a few different teaser content block appearances when creating teaser page types. The out-of-the-box approach is for an CmsAdmin or developer to manually add key-value pair type options in the CMS admin mode for the property but when using PageTypeBuilder there is a nice way of adding settings programmatically: