webentwicklung-frage-antwort-db.com.de

ASP.Net-Identität, wie man Ziel-DB einstellt?

Ich verwende das ASP.NET Identity Sample vom Asp-Team und versuche, die Datenbank für das IdentityDbContext... zu ändern.

Ich habe es mit dem Konstruktor versucht

public MyDbContext() : base("MyConnectionString") { } // base is IdentityDbContext

wie bei einer DbContext-Klasse.

Das funktioniert gut, bis ich versuche, einen Benutzer zu registrieren ...

await IdentityStore.CreateLocalUser(user, model.Password)

gibt false... keinen Fehler, nichts zurück.

Irgendwelche Ideen, wie man das behebt?

Bearbeiten:

Dateiname ist Models\AppModel.cs, dort ist der MyDbContext class

ursprünglich war es

public class MyDbContext : IdentityDbContext<MyUser, UserClaim, UserSecret, UserLogin, Role, UserRole>
{
}

ich habe es in geändert

public class MyDbContext : IdentityDbContext<MyUser, UserClaim, UserSecret, UserLogin, Role, UserRole>
{
    public MyDbContext() : base("MyConnectionString") { }
}

die Verbindungszeichenfolge funktioniert, weil ich andere Projekte habe, die das gleiche verwenden, und sie laufen gut.

<connectionStrings>
    <add name="MySailorContext" connectionString="Data Source=THOMAS-LAPTOP;Initial Catalog=MySailor;Integrated Security=True;Pooling=False;MultipleActiveResultSets=true" providerName="System.Data.SqlClient"/>
</connectionStrings>
23
Nefarion

Die Antwort ist nicht mehr gültig für die Version 1.0, die mit VS2013 in der neuen mvc5-Anwendung geliefert wird. Um dies jetzt zu tun:

Deklarieren Sie eine Klasse wie:

public class AppUserStore : UserStore<IdentityUser>
{
    public AppUserStore():base(new MY_IDENTITYDBCONTEXT())
    {

    }
}

Und bei Startup.Auth.cs ändern

UserManagerFactory = () => new UserManager<IdentityUser>(new UserStore<IdentityUser>());    

zu

UserManagerFactory = () => new UserManager<IdentityUser>(new AppUserStore());

Ohne dies wird Ihr IdentityDbContext-Konstruktor (und beispielsweise OnModelCreating) nicht ausgeführt, wenn Sie einen Benutzer mit asp.net-Identität erstellen.

5
Leo

Ich hatte das gleiche Problem und hatte ein wenig zu kämpfen, da es im Netz noch nicht viel Material über ASP.NET Identity gibt. Nachdem ich die Baugruppen überprüft hatte, stellte ich fest, dass es eigentlich einfach ist.

Suchen Sie einfach den Ort, an dem Ihr AuthenticationIdentityManager initialisiert wird, und verwenden Sie die IdentityStore-Überladung, um Ihren Datenbankkontext wie folgt anzugeben:

IdentityManager = new AuthenticationIdentityManager(new IdentityStore(new Model()));

Meine Modellklasse erbt DbContext. Hoffe das hilft.

2
Joao de Araujo

RobM hat die umfassende Antwort und Rob B hat die einfache Antwort.

In Ihrem Szenario setzen Sie Ihre Basis auf "MyConnectionString", das in Ihrer Konfigurationsdatei nicht vorhanden ist.

<connectionStrings>
    <add name="MySailorContext" connectionString="Data Source=THOMAS-LAPTOP;Initial Catalog=MySailor;Integrated Security=True;Pooling=False;MultipleActiveResultSets=true" providerName="System.Data.SqlClient"/>
</connectionStrings>

public class MyDbContext : IdentityDbContext<MyUser, UserClaim, UserSecret, UserLogin, Role, UserRole>
{
    public MyDbContext() : base("MyConnectionString") { }
}

Welchen Namen Sie Ihrem connectionString auch immer geben, er muss mit dem übereinstimmen, den Sie in Ihrem DbContext haben: base

<connectionStrings>
    <add name="MySailorContext" connectionString="Data Source=THOMAS-LAPTOP;Initial Catalog=MySailor;Integrated Security=True;Pooling=False;MultipleActiveResultSets=true" providerName="System.Data.SqlClient"/>
</connectionStrings>

public class MyDbContext : IdentityDbContext<MyUser, UserClaim, UserSecret, UserLogin, Role, UserRole>
{
    public MyDbContext() : base("MySailorContext") { }
}
2
Terri

Wenn Sie lediglich die Verbindungszeichenfolge ändern müssen, die vom Identitätsanbieter verwendet wird, ist das Folgende nicht sehr elegant, scheint jedoch zu funktionieren. Suchen Sie, wo die IdentityManager-Klasse instanziiert ist, und fügen Sie Folgendes hinzu:

//Leave this untouched:
IdentityManager = new AuthenticationIdentityManager(new IdentityStore());
//...and add this:
((IdentityStore)identityManager.Store).DbContext.Configuration
    .Database.Connection.ConnectionString = "your connection string here";
1
Konamiman

Suchen Sie nach der Klasse, die von IdentityDbConect erbt, z.

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext()
            : base("DefaultConnection")
        {
        }
    }

Ändern Sie dann "DefaultConnection" in den Namen einer Verbindungszeichenfolge, die in Ihrer web.config angegeben ist.

1
Rob Bowman

Da es bei der Umstellung auf RTM eine Menge Änderungen gibt, habe ich die SPA-Vorlage aktualisiert, die einen WebApi-Controller für alle Identitätsanmeldungen und dergleichen verwendet. Es ist eine wirklich coole Vorlage, wenn Sie es nicht gesehen haben.

Ich füge meinen gesamten Code hier ein: https://github.com/s093294/aspnet-identity-rtm/tree/master

(Beachten Sie, es ist nur zur Inspiration. Ich habe es nur zum Laufen gebracht und nichts weiter. Habe auch ein oder zwei Bugs).

1