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.