Warum dies verstößt gegen die Einschränkung der Typparameter 'TUser'?

Ich versuche mich anzupassen asp.net Identität von Entitäten mit den folgenden:

public class User : IdentityUser<string, UserClaim, UserRole, UserLogin>
public class UserClaim : IdentityUserClaim<string>
public class UserLogin : IdentityUserLogin<string>
public class UserRole : IdentityUserRole<string>
public class UserToken : IdentityUserToken<string>
public class Role : IdentityRole<string, UserRole, RoleClaim>
public class RoleClaim : IdentityRoleClaim<string>

Habe ich dann erstellt eine DbContext-Klasse wie folgt

public class AppDbContext : IdentityDbContext<User, Role, string, UserClaim, UserRole, UserLogin, RoleClaim, UserToken>

Dann konfigurieren Sie diese mit

services
    .AddIdentity<User, Role>()
    .AddEntityFrameworkStores<AppDbContext>()
    .AddDefaultTokenProviders();

aber ich habe versucht auch mit

.AddEntityFrameworkStores<AppDbContext, string>()

Ich habe gelesen, dass viele blog-posts im internet, wie diese zum Beispiel, aber die meisten von Ihnen befassen müssen, gegen eine änderung des Datentyps für die Tasten, wie zu int oder Guid. In meinem Fall bin ich nicht die änderung der Standard-Schlüssel Datentyp aus string.

Ich allen diesen Fällen das kompilieren ist ok, aber es wirft beim ausführen einen Fehler

System.TypeLoadException
GenericArguments[0],'MyIdentity.Personen.Benutzer", auf
'Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore`8[TUser,TRole,TContext,TKey,TUserClaim,TUserRole,TUserLogin,TUserToken]'
gegen die Einschränkung der Typparameter 'TUser'.

System.RuntimeTypeHandle.Instanziieren(RuntimeTypeHandle Griff,
IntPtr* pInst, int numGenericArgs, ObjectHandleOnStack-Typ) bei
System.RuntimeTypeHandle.Instanziieren(Typ[] inst) bei
System.RuntimeType.MakeGenericType(Typ[] Instanziierung)

Wenn ich eine angepasste UserStore Klasse wie erklärt dieser Beitrag

public class UserStore : UserStore<User, Role, AppDbContext, string, UserClaim, UserRole, UserLogin, UserToken>

Einen compile-Fehler angezeigt, die besagt, dass

CS0311 Dem Typ " MyIdentity.Personen.Rolle' kann nicht als Typ
parameter 'Oberleitungs' im generischen Typ oder Methode "UserStore'. Es gibt keine implizite Konvertierung von Referenz
'MyIdentity.Personen.Rolle' zu
'Microsoft.AspNetCore.Identität.EntityFrameworkCore.IdentityRole>'

Was mache ich falsch?

  • Hat Ihr User Klasse ein default-Konstruktor?
  • Ja. Ich habe gerade überprüft. public User() : base()
InformationsquelleAutor Lorenzo | 2016-09-17
Schreibe einen Kommentar