asp.net mvc - tutorial - Cómo crear una tabla de búsqueda y definir relaciones
mvc c# paso a paso (1)
Tenemos una tabla de búsqueda común aquí. Se parece a ti. LookupData tiene una clave principal y una clave externa para LookupTypes, que es equivalente a su enumeración y el valor. También podríamos tener algunos otros campos simples como un indicador o código que se identifican en la tabla de metadatos LookupType. Luego, en la tabla principal, podríamos tener "GenderLookupId", que apunta al campo LookupData.Id. Los identificadores en sí no tienen ningún significado y se pueden ingresar en cualquier orden. Si desea que el género 1 y 2 tengan significado, probablemente debería agregar otro atributo para eso (ver claves sustitutas).
Ejemplo con datos:
LookupType
ID Description CodeDesc BooleanDesc
1 Genders Gender Code NULL
2 Races Race Code Is Active
LookupData
ID LookupTypeId Description Code Boolean
789 1 Male M NULL
790 2 White W True
791 1 Female F NULL
792 2 Hispanic H False
Tabla de nombre principal
NameId Name GenderLookupId RaceLookupId
1234 Joe Smith 789 790
1235 Mary Meyers 791 792
Clases:
public class LookupType
{
public int Id { get; set; }
public string Description { get; set; }
public string CodeDescription { get; set; }
public string BooleanDescription { get; set; }
}
public class LookupData
{
public int Id { get; set; }
public int LookupTypeId { get; set; }
public string Description { get; set; }
public string Code { get; set; }
public bool? BooleanValue { get; set; }
public LookupType LookupType { get; set; }
}
public class Name
{
public int Id { get; set; }
public string FullName { get; set; }
public int? GenderLookupId { get; set; }
public LookupData Gender { get; set; }
}
Configuración de LookupData:
HasRequired(p => p.LookupType).WithMany(p=>p.LookupData).HasForeignKey(p=>p.LookupTypeId).WillCascadeOnDelete(false);
Configuración de nombre:
HasOptional(p => p.Gender).WithMany(p=>p.Name).HasForeignKey(p=>p.GenderLookupId).WillCascadeOnDelete(false);
Como puede ver a continuación, hay una tabla de búsqueda para los valores enum y quiero crear una relación entre los valores enum de una tabla y la columna LookupKey de la tabla de búsqueda (en lugar de la columna ID de la tabla de búsqueda).
Tabla de búsqueda:
ID | LookupType | LookupKey | LookupValue |
101 | Status | 0 | Passive |
106 | Gender | 1 | Male |
113 | Status | 1 | Active |
114 | Gender | 2 | Female |
118 | Status | 2 | Cancelled |
Tabla principal:
ID | Status | Gender | Name | ...
1 | 0 | 1 | John Smith | ...
2 | 1 | 2 | Christof Jahnsen | ...
3 | 2 | 1 | Alexi Tenesis | ...
4 | 0 | 2 | Jurgen Fechtner | ...
5 | 1 | 2 | Andreas Folk | ...
Sin embargo, al usar la relación PK-FK e InverseProperty como en las Anotaciones de Datos - Atributo InverseProperty, la relación se crea con la columna ID de la tabla de búsqueda y no puedo establecer la relación con la columna LookupKey. ¿Podría dar un ejemplo de cómo lograr esto?