I'm expirementing with page providers and I've just tried to implement a simple one that pulls pages from somewhere else in the tree. I modified the one that Allan demo'ed at Codemania.
However, whenever I bring up Edit Mode, the Content Structure pane errors with this:
Deadlock risk detected. Trying to read a page from the same thread that is already trying to read the same page.
And, I guess this makes sense. I'm trying to make the same page appear in two places in the tree, which fits with that error.
But how do you get around this?
I can't really solve this without looking at the code... I have done a lot of hard time with page providers without any deadlock issues.
All page providers really do is let you replace SQL Server with another data store. You map page properties to the background data in the GetLocalPage method and provide the structure in the GetChildrenReferences method. Pretty straightforward on the face of it and I don't see how this should necessarily lead to dead-lock when you're mapping one row of data onto two different pages.
The complication may be in the way that the page Guids in the data source are working? Your page provider will need to persist an internal unique Guid for each page via the two ResolveLocalPage methods. If two different pages have the same Guid then it will probably explode somewhere. This is where custom page providers get more tricky as for most data sources you will need to create a mechanism for generating and persisting a Guid for each record in your data source.