Tengo una ProjectName.Core
biblioteca que contiene toda mi lógica de negocios y mis entidades y su comportamiento. Actualmente no existe ninguna relación con Entity Framework o cualquier otro DAL porque me gusta mantener esas cosas separadas. Las configuraciones de Entity Framework (usando la API Fluent) residen en un ProjectName.Infrastructure
proyecto, de modo que se encarga de empujar mis entidades a EF. Básicamente voy en la dirección de una arquitectura similar a la cebolla.
Sin embargo, al agregar el marco de identidad ASP.NET en la mezcla, tengo que hacer que mi ApplicationUser
entidad herede de la IdentityUser
clase, pero mi ApplicationUser
clase tiene relaciones con otras entidades. Al heredar IdentityUser
, estoy introduciendo una referencia a Entity Framework en mi proyecto de entidades, el único lugar donde no quisiera hacerlo. Sacar la ApplicationUser
clase del proyecto de entidades y Infrastructure
ponerla en el proyecto (ya que está utilizando un sistema de identidad basado en Entity Framework) dará como resultado referencias circulares, por lo que tampoco es el camino a seguir.
¿Hay alguna forma de evitar esto para que pueda mantener la separación limpia entre las dos capas además de no usar ASP.NET Identity?
fuente
Respuestas:
Puede crear una clase de usuario que no tenga nada que ver con la identidad ASP.NET en su biblioteca principal.
Si está utilizando Entity Framework, cree una clase de configuración para sus entidades (opcional).
También debería crear clases para Role, UserClaim y UserLogin . Puede nombrarlos como quiera si no le gustan los nombres anteriores.
En la capa web, cree una clase llamada AppUser (u otro nombre si lo desea). Esta clase debe implementar la interfaz ASP.NET Identity IUser <TKey> , donde TKey es el tipo de datos para la clave primaria ( Guid en el ejemplo anterior).
Cambie todas las referencias a UserManager en el proyecto web a UserManager <AppUser, Guid> .
Finalmente, cree su propio UserStore . Esencialmente, el UserStore personalizado tomará el objeto AppUser , lo convertirá en un objeto de entidad de Usuario y luego lo mantendrá. A continuación se muestra un ejemplo de uno de estos métodos:
Para obtener una descripción completa de una posible implementación, haga clic aquí .
Al final, es tu elección. Mida la cantidad de esfuerzo que le tomaría mantener esta implementación en lugar de solo hacer referencia al marco de Identity en su biblioteca Core. Personalmente, pensé en hacerlo de la manera que describí anteriormente, sin embargo, no lo hice porque potencialmente tendría que cambiar mi código cada vez que se actualiza el marco de identidad de ASP.NET.
¡Espero que esto ayude y responda tu pregunta!
fuente