Relación entre ASPNET Tablas proveedor de pertenencia y las tablas de suscripciones personalizado

StackOverflow https://stackoverflow.com/questions/1829832

  •  11-09-2019
  •  | 
  •  

Pregunta

Fui a través de un ejemplo de proveedor de perfil personalizado hace un tiempo y estoy ahora de volver a ellos.

Mi base de datos cuenta con mesas de todo el dbo.aspnet_ * creadas cuando me encontré con el registro Red PEA mago. En estas tablas tengo aspnet_Profile que tiene una restricción FK señalando aspnet_Users.

También tiene dos tablas en MyDB: La primera, dbo.ProfileData, tiene una restricción de clave externa señalando dbo.Profile.

Lo que quiero es entender cómo las tablas se refieren a MyDB los de dbo.aspnet_ *. ¿No debería haber una restricción de clave externa (o algún tipo de relación) entre las tablas de perfiles en MyDB y las tablas de la Red PEA? algunos discusión de cómo mis tablas personalizadas corresponden a las entregadas por la Red del PEA sería maravilloso.

Gracias de antemano.

¿Fue útil?

Solución

Hay dos opciones que puedo ver, ambos de los cuales producirán básicamente el mismo resultado:

  • FK desde dbo.aspnet_User.UserID a dbo.Profile.UserID, a continuación, definir una clave única en dbo.Profile.UserID (a menos que usted lo usa como columna de PK para dbo.Profile)

  • FK desde dbo.aspnet_Profile.ProfileID a dbo.Profile.ProfileID

dbo.aspnet_User es lógicamente 1 - 1 con dbo.aspnet_Profile, por lo que en realidad no importa qué enfoque se utiliza como usted seguirá recibiendo la misma integridad relacional.

Si va a sustituir la tabla de datos de perfil estándar con su propia aplicación, entonces tiene más sentido usar la primera sugerencia, de lo contrario si está extendiendo el perfil de esquema a continuación, utilizar la segunda sugerencia.

Editar

aspnet_Profile es la tabla estándar - la SqlProfileProvider estándar almacena los datos del perfil del usuario como una bolsa de propiedades serializado en aspnet_Profile, por lo tanto, ¿por qué no hay una mesa aspnet_ProfileData separada.

Este enfoque permite que el esquema de perfil para personalizar fácilmente para diferentes aplicaciones sin necesidad de ningún cambio en la base de datos subyacente, y es la solución más óptima para un marco como .NET. El inconveniente es que SQL Server no tiene fácil acceso a estos datos en absoluto, por lo que es mucho más difícil de índice, actualizar y consultar los datos del perfil del usuario utilizando T-SQL y lógica basada en conjunto.

El enfoque más común que he visto para eliminar esta limitación es extender el SqlProfileProvider estándar para escribir en una tabla de datos de perfil personalizado que tiene columnas específicas para las propiedades de perfil de aplicación específica. Esta tabla naturalmente tiene una relación de 1-1 con la tabla aspnet_Profile, así que tiene una clave externa tal como se indica anteriormente.

El papel del proveedor extendida es promover las propiedades de perfil específicos a las columnas durante el perfil escribe y lee en las columnas cuando se recupere el perfil.

Esto le permite mezclar y combinar las soluciones de almacenamiento en una base como en las necesidades, siempre y cuando su proveedor extendida sabe cómo caer de nuevo a la implementación estándar en el que no 'sabe' acerca de una propiedad determinada.

Siempre pienso que lo mejor es dejar las tablas de miembros estándar tal y como son, y ampliar cuando sea necesario el uso de nuevas tablas con claves externas apropiadas, a continuación, subclase el proveedor adecuado y anular los métodos proveedor con su propia aplicación (llamada en la base aplicación siempre que sea posible).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top