2016-04-17 15 views
1

Ich versuche Identität 3 zu erweitern, um primäre Schlüssel als Ganzzahlen und meine benutzerdefinierten Tabellen zu verwenden. Das Problem ist, dass ich möchte, dass alle meine Datenbankklassen von meiner BaseEntity Klasse ableiten, aber die ApplicationUser Einheit ist gezwungen, von IdentityUser<int> abzuleiten.ASP.NET Core 1.0 Identity 3 & BaseEntity

Ich brauche die BaseEntity, um meine generischen Repository-Muster und DbContext zu implementieren.

Dies ist, was eigentlich würde ich gerne tun, aber C# unterstützt keine Mehrfachvererbung Klasse:

public class User : BaseEntity, IdentityUser<int> 
{ 

} 


public abstract class BaseEntity 
{ 
    public int Id{ get; set; } 

    //Some extra logic 

} 

Haben Sie eine Idee, auf diesem?

Konnte ich es wahrscheinlich mit einer Schnittstelle implementieren, die irgendwie IdentityUser<int> wickeln?

Antwort

1

Grundsätzlich können Sie das tun, da die Basis von Identity Framework ist nicht gebunden an IdentityUser<T> Typ. Identity<T> wird nur im Microsoft.AspNet.Identity.EntityFramework Paket verwendet. Wie Sie im GitHub-Repository von Microsoft.AspNet.Identity.EntityFramework sehen können, ist das IdentityUser<T> nur dort implementiert. Sie können es grundsätzlich forkieren und implementieren Sie Ihre Basisklasse und verwenden Sie das als Ihre Klasse.

Andernfalls müssen Sie alle Stores selbst implementieren, um Ihre neue Basisklasse zu verwenden. Die Basis von Microsoft.AspNet.Identity hängt nicht von einer solchen Klasse ab, alle generischen Klassen haben die where TUser : class, was bedeutet, dass sie mit jeder Klasse verwendet werden kann.

Eine einfachere Lösung, wenn Sie nicht wollen, eine eigene Implementierung implementieren, basierend auf Identität, ist eine Schnittstelle zu verwenden:

Dann Ihre User Klasse wie folgt

public class IBaseEntity 
{ 
    int Id { get; set; } 
} 

public class User : IdentityUser<int>, IBaseEntity 
{ 
    public int Id { get; set; } 
} 
aussehen
Verwandte Themen