I've been doing quite a bit of work with custom providers the last week or so. What I've found is that some of the functionality makes sense and more of it ends up being implemented as NotSupportedExceptions. Either way, I think the whole model is really nice, but not always practical. I wish we were standardizing on SQL Server, but unfortunatley the project I'm working on has to be database-agnostic. To achieve that ability, we have an object model that everything goes through, so using a custom provider makes sense for things like membership and roles.
Well, today I get to use the "out-of-the-box" SqlMemberShipProvider. This made life much easier for me...after jumping a few hurdles. This one I wanted to share in case anyone else runs into this issue. I started off on my merry way by making a simple provider setting in my Web.config for the SqlMembershipProvider. After that, I created my own database and ran the aspnet_regsql.exe utility to create the tables I needed for the providers I wanted. Then I started getting strange errors about an "auto generated aspnetdb could not be accessed" or something to that effect. Thinking this might be a Sql Express issue, I inherited a class from SqlMembershipProvider and tried again. Somehow I got what I needed working, which was the "create user" control. The next problem I ran into was the same error message when trying to call
MembershipUser user = Membership.GetUser();
Fortunately I had some notes that I took while Fritz Onion was teaching at CampSight. I tried clearing out the connection strings in the config and creating a new value for LocalSqlServer and it all started working.
<connectionStrings>
<clear/>
<add name="LocalSqlServer"
Oh, and another quick note. If you want the UserID fro the MemberShip user, it is not a UserID property you should be looking for. What you want is the ProviderUserKey property.