Estoy mapeando un conjunto de clases de membresía para mi aplicación usando Fluent NHibernate. Estoy mapeando las clases en la estructura de la base de datos de miembros asp.net. El esquema de la base de datos relevante para el problema se ve así:Fluido NHibernate - Cómo mapear una clave foránea que no admite valores NULL que existe en dos tablas unidas
ASPNET_USERS
UserId PK
ApplicationId FK NOT NULL
other user columns ...
ASPNET_MEMBERSHIP
UserId PK,FK
ApplicationID FK NOT NULL
other membership columns...
Existe una relación de uno a uno entre estas dos tablas. Estoy intentando unir las dos tablas juntas y datos de los mapas de ambas tablas a una sola entidad 'Usuario' que se parece a esto:
public class User
{
public virtual Guid Id { get; set; }
public virtual Guid ApplicationId { get; set; }
// other properties to be mapped from aspnetuser/membership tables ...
Mi archivo de asignación es la siguiente:
public class UserMap : ClassMap<User>
{
public UserMap()
{
Table("aspnet_Users");
Id(user => user.Id).Column("UserId").GeneratedBy.GuidComb();
Map(user => user.ApplicationId);
// other user mappings
Join("aspnet_Membership", join => {
join.KeyColumn("UserId");
join.Map(user => user.ApplicationId);
// Map other things from membership to 'User' class
}
}
}
Si Intento ejecutar con el código anterior Obtengo una excepción FluentConfiguration
Intenté agregar la propiedad 'ApplicationId' cuando ya se agregó.
Si elimino la línea "Map (user => user.ApplicationId);" o cámbialo a "Map (user => user.ApplicationId) .Not.Update(). Not.Insert();" luego la aplicación se ejecuta pero obtengo la siguiente excepción al intentar insertar un nuevo usuario :
No se puede insertar el valor NULL en la columna 'ApplicationId', tabla 'ASPNETUsers_Dev.dbo.aspnet_Users'; la columna no permite nulos. INSERT falla La declaración ha finalizado.
Y si dejo la .MAP (user => user.ApplicationId) ya que originalmente era y hacer cualquiera de esos cambios a la unen .MAP (user => user.ApplicationId) luego recibo la misma excepción anterior, excepto por supuesto la excepción está relacionada con una inserción en la tabla aspnet_Membership
Entonces ... ¿cómo hago este tipo de mapeo suponiendo que no puedo cambiar el esquema de mi base de datos?
Si entiendo sus tablas de esquema, parece que tiene una clave compuesta que consta de ** both ** userId y ApplicationId. Intente definir la clave compuesta y luego hacer la asignación Join usando esa clave. – Tahbaza