sql >> Databasteknik >  >> RDS >> Sqlserver

Använder MVC 4 SimpleMembership med en befintlig databas-först EF-modell

Rent som en referenspunkt kan det vara en bra idé att skapa en ny Internetapplikationsmall för ett ASP.NET MVC 4-webbapplikationsprojekt (dvs via Arkiv> Nytt projekt).

Om du tittar på AccountController , som @zms6445 säger, den är dekorerad med en InitializeSimpleMembership attribut. Du kan hitta implementeringen av detta attribut i filen InitializeSimpleMembershipAttribute.cs i mappen Filters i rotkatalogen.

Här är det här den saknade delen av pusslet - du måste koppla upp din befintliga databas så att den används av SimpleMembershipProvider . Det här är koden du behöver:

private class SimpleMembershipInitializer
{
    public SimpleMembershipInitializer()
    {
        try
        {
            if (!WebSecurity.Initialized)
            {
                WebSecurity.InitializeDatabaseConnection("CONNECTION_STRING_NAME", "USER_TABLE", "USER_ID_FIELD", "USER_NAME_FIELD", autoCreateTables: true);
            }
        }
        catch (Exception ex)
        {
            throw new InvalidOperationException("Something is wrong", ex);
        }
    }
}

Några saker att notera:

  1. CONNECTION_STRING_NAME är en post i din web.config ConnectionStrings - du KAN INTE använda modellanslutningssträngen här - SimpleMembershipProvider känner inte igen det formatet! Du måste ange en System.Data.SqlClient anslutningssträng, t.ex.

  2. USER_TABLE är tabellen i din databas som innehåller extra användarinformation, såsom förnamn, efternamn etc. Detta är länkat till de autogenererade tabellerna via USER_ID_FIELD.

  3. USER_ID_FIELD är vanligtvis den primära nyckeln i tabellen Användare. Det måste vara av typen int .

  4. USER_ID_NAME är ett unikt namn för användaren, vilket kan vara en e-postadress.

  5. autoCreateTables är inställd på true för att säkerställa att de tabeller som krävs för att SimpleMembership ska fungera skapas om de inte redan finns.

Naturligtvis aktiveras den här koden bara om du träffar en sida via AccountController , eftersom detta har dekorerats av attributet. Du kan lägga in en brytpunkt där och se den i aktion.

Detta bör få dig igång - mallen för Internetapplikationer är en ganska bra mall att följa om du fastnar.

Hoppas detta hjälper.



  1. LINQ to Entities känner inte igen metoden 'System.String ToString()' och den här metoden kan inte översättas till ett butiksuttryck

  2. Min spring+hibernate-app stänger inte jdbc-anslutningar

  3. Ändra standarddatumformat lagrat i en databas

  4. Anrop till en medlemsfunktion execute() på boolean in