Erelid |
|
Ik heb een projectje in ASP.NET waarbij het gebruikersbeheer afgehandeld wordt via de ASP.NET Membership provider. Omdat die website-gebruikers afgeleid worden uit contactpersonen uit een ERP-systeem heb ik aan de profielen een extra type gekoppeld, ContactId, van het type Guid.
Nu is het zo dat er een functie bestaat 'Membership.FindUsersByEmail' en 'Membership.FindUsersByName', maar ik wil nu Users gaan vinden op basis van die extra gedefinieerde property... en dat lijkt niet te lukken.
Alle Users gaan ophalen, hierdoor loopen en kijken of er een match is is dan natuurlijk ook een optie, maar dat zie ik niet goed komen als dat ding een groot ledenbestand begint te krijgen.
Ik ben dan maar eens gaan kijken in de database, in de hoop dat die Membership provider zijn data op een redelijke manier gaat bijhouden... maar blijkbaar maakt het ding geen extra kolom aan voor deze custom properties, maar worden die bewaard in een aparte tabel, en helaas nog wel op de volgende manier:
- UserId (logisch)
- PropertyNames (bv. ContactId:S:0:90:ContactLanguage:S:90:3:)
- PropertyValuesString (string representatie van de waardes)
- PropertyValuesBinary (binaire representatie van de waarde als deze niet geserialiseerd kon worden)
De waarde in PropertyNames is de naam van de property, S of B om te bepalen in welke van de 2 volgende kolommen het staat, het eerste cijfer is de startindex, het tweede cijfer is de lengte van de waarde.
Een voorbeeld van PropertyValuesString:
<?xml version="1.0" encoding="utf-16"?> <guid>abe8c9ae-661d-df11-8fc2-00155d606613</guid>eng
<?xml version="1.0" encoding="utf-16"?> <guid>abe8c9ae-661d-df11-8fc2-00155d606613</guid>eng
Ik zou dus kunnen een User-function in SQL gaan rammelen zodat ik via reguliere expressies etc de juiste ContactId('s) er kan gaan uithalen, maar dan wordt de functie telkens opnieuw uitgevoerd over ALLE rijen die erin zitten, en dan verleg ik het performance-probleem gewoon naar de databaseserver.
DUS, de vraag luidt: hoe kan je in ASP.NET Users gaan selecteren op basis van custom properties op een zo performant mogelijke manier?
edit: Nevermind: http://www.asp....er-samples/
|