Próbuję rozszerzyć tożsamość 3, aby klucze podstawowe użytkownika były liczbami całkowitymi i niestandardowymi tabelami. Problem polega na tym, że chcę, aby wszystkie moje klasy baz danych pochodziły z mojego BaseEntity
klasa, ale ApplicationUser
podmiot jest zmuszony do wyprowadzenia IdentityUser<int>
.
potrzebuję BaseEntity
w celu implementacji moich ogólnych wzorców repozytoriów i DbContext
.
To jest właśnie to, co chciałbym zrobić, ale C # nie obsługuje dziedziczenia wielu klas:
public class User : BaseEntity, IdentityUser<int>
{
}
public abstract class BaseEntity
{
public int Id{ get; set; }
//Some extra logic
}
Czy masz jakiś pomysł na ten temat?
Czy mógłbym prawdopodobnie zaimplementować go za pomocą interfejsu, który jakoś zawinie IdentityUser<int>
?
Odpowiedzi:
1 dla odpowiedzi № 1Zasadniczo możesz to zrobić, ponieważ jest to podstawa Identity Framework nie związane z IdentityUser<T>
rodzaj. Identity<T>
jest używany tylko w Microsoft.AspNet.Identity.EntityFramework
pakiet.
Jak widać w repozytorium GitHub Microsoft.AspNet.Identity.EntityFramework, IdentityUser<T>
jest tam tylko wdrażany. Zasadniczo możesz go rozwidlić i zaimplementować tam swoją klasę podstawową i użyć jej jako swojej klasy.
W przeciwnym razie musisz sam wdrożyć wszystkie sklepy, aby użyć nowej klasy bazowej. Podstawa Microsoft.AspNet.Identity nie polegaj na takiej klasie, wszystkie klasy ogólne mają where TUser : class
, co oznacza, że można go używać z dowolną klasą.
Jednym prostszym rozwiązaniem, jeśli nie chcesz wdrożyć własnej implementacji opartej na Tożsamości, jest użycie interfejsu:
Potem twoja User
klasa będzie wyglądać tak
public class IBaseEntity
{
int Id { get; set; }
}
public class User : IdentityUser<int>, IBaseEntity
{
public int Id { get; set; }
}