/ / ASP.NET Core 1.0 Identity 3 i BaseEntity - asp.net-identity, asp.net-core, asp.net-core-mvc

ASP.NET Core 1.0 Identity 3 i BaseEntity - asp.net-identity, asp.net-core, asp.net-core-mvc

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 № 1

Zasadniczo 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; }
}