Wie kann ich mithilfe von Entity Framework -Migrationen ein Benutzerkonto in meiner Benutzertabelle erstellen?

StackOverflow https://stackoverflow.com/questions/9326115

Frage

Zuvor habe ich einen Datenbankinitialisierer verwendet, um meine Tabellen zu säen oder zu prävopuliert, wenn ich sie zuerst mit Code erstellt habe. Das alles hat großartig funktioniert, aber ich wollte mit den EF 4.3 -Migrationen übergehen.

Ich habe in meinem Projekt auf EF 4.3 aktualisiert und den Datenbank -Initialisierer -Code entfernt und in die Seed -Methode in der Datei der Migrationskonfiguration.cs gesteckt. Dies alles funktioniert für mich in Ordnung, um meine Tabellen vorzubereiten, außer wenn ich einen Standardbenutzer in meine Benutzertabelle säen möchte.

Ich verwende den folgenden Code in meiner Seed -Methode: (Der AddorUpdate -Code verwendet derzeit nicht, da ich nicht sicher bin, wie ich das für diese Situation verwenden soll - daher der Benutzername -Check).

        // create default User
        MembershipCreateStatus status = new MembershipCreateStatus();
        User admin = context.Users.Find("TestGuy");
        if (admin == null)
        {
            Membership.CreateUser("TestGuy", "TestGuy123", "testguy@test.com");
            if (status == MembershipCreateStatus.Success)
            {
                admin.Firstname = "Test";
                admin.Surname = "Guy";
                admin.DateLastActivity = DateTime.Now;
                admin.LastActivityRoute = "/Home/Index";
                Role adminRole = context.Roles.Find("Administrator");
                admin.Roles = new List<Role>();
                admin.Roles.Add(adminRole);
            }
        }

Wenn ich versuche, Update-Daten auszuführen, erhalte ich diesen Fehler:

The password-answer supplied is invalid.

Ich denke, das liegt nur darauf, wie ich den CreateUser nenne, aber ich kann nicht herausfinden, wie ich diesen Fehler umgehen kann. Ich habe versucht, nur Nulls für die Sicherheitsfrage und die Antwort einzulegen, aber das scheint nicht zu funktionieren.

Hat jemand ein Beispiel dafür, einen Benutzer mit der Option "Addorupdate" zu säen?

Bearbeiten 1:

Nach einem der folgenden Kommentare verwende ich Altairis Security Toolkit, um meine Mitgliedschaft zu verwalten. Mein Web.config ist wie folgt eingerichtet:

<membership defaultProvider="TableMembershipProvider">
  <providers>
    <clear />
    <add name="TableMembershipProvider" type="Altairis.Web.Security.TableMembershipProvider, Altairis.Web.Security" connectionStringName="DataContext" minRequiredPasswordLength="8" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" minRequiredNonAlphanumericCharacters="0" passwordStrengthRegularExpression="" />
  </providers>
</membership>

Bearbeiten 2:

Ich habe dies auch als offenes Ticket im Altairis -Forum gestellt.http://altairiswebecurity.codeplex.com/workitem/32273

Bearbeiten 3:

Um dies ohne Fehler zum Laufen zu bringen, musste ich meinen Code wie folgt einrichten:

        // create default User
        MembershipCreateStatus status = new MembershipCreateStatus();
        User admin = context.Users.Find("TestGuy");
        if (admin == null)
        {
            Membership.CreateUser("TestGuy", "TestGuy123", "testguy@test.com", null, null, true, out status);
            if (status == MembershipCreateStatus.Success)
            {
                admin = context.Users.Find("TestGuy");
                admin.Firstname = "Test";
                admin.Surname = "Guy";
                admin.DateLastActivity = DateTime.Now;
                admin.LastActivityRoute = "/Home/Index";
                Role adminRole = context.Roles.Find("Administrator");
                admin.Roles = new List<Role>();
                admin.Roles.Add(adminRole);
            }
        }

Das obige wird jetzt beim Ausführen von Update-Database kompilieren, aber es wird kein neuer Benutzer generiert. Wenn jemand Vorschläge zum Versuch hat, wäre das großartig!

Vielen Dank,

Reich

War es hilfreich?

Lösung 2

Aus einigen Nachforschungen zu diesem Thema wird deutlich, dass das Saatgut der Benutzer außerhalb der Migrations -Saatgut -Logik erstellt werden sollte - zumindest für den Moment, bis sie es einfacher machen!

Als Arbeit verfolgte ich das Beispiel aus dieser stackoverflow -Frage (Bester Weg, um Daten im Entitätsgerüst 4.3 inkrementell zu säen), um meinen neuen Benutzer manuell zu machen, wenn sie außerhalb der Migrations -Konfigurationsdatei starten.

Zumindest für mich ist es nicht ideal, da alle "Start -up" -Daten nicht in einem Bereich sind, aber die Arbeit erledigt und nicht so schwer zu folgen ist.

Andere Tipps

Ich denke, Ihre Mitgliedschaft muss Fragen und Antwort erfordern. Haben Sie versucht, "if (Mitgliedschaft) einzuchecken," if (Mitgliedschaft.

An Admin: Übrigens wollte ich dies zuerst als Kommentar als Kommentar veröffentlichen, da ich das letzte Mal bei der Verwendung einer Antwort gekennzeichnet war, aber ich sehe hier keine Option zum Hinzufügen von Kommentaren, nur Antworten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top