Digamos que tengo un User
con 2 entidades derivadas Student
, Teacher
. Utilicé el método TPH, así que no tengo ninguna propiedad en mis clases para decirme quién es profesor o no.Filtro con múltiples clases derivadas con Code-first Entity Framework
tengo 2 booleanos ésta para proceder a mí para cargar ya sea estudiante o profesor como este:
//IQueryable<User>
var query = userRepository.GetUsers();
//Type filtering
if (searchModel.IsStudent)
{
query = query.OfType<Student>();
}
if (searchModel.IsTeacher)
{
query = query.OfType<Teacher>();
}
Cuando esto trata de evaluar, consigo este error cuando ambas son ciertas:
DbIsOfExpression requires an expression argument with a polymorphic result type that is compatible with the type argument.
Ya he visto algunas respuestas aquí en SO pero están orientadas a 1 tipo de filtrado.
Después me gustaría hacer algo como esto (codificación en bruto):
if(query.ToList().FirstOrDefault() is Student)
{
print "student";
}
El mapeo:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.Map<Teacher>(m => m.Requires("UserType").HasValue("Teach"))
.Map<Student>(m => m.Requires("UserType").HasValue("Stu"))
.Map<Staff>(m => m.Requires("UserType").HasValue("Staff"));
}
¿Podría mostrarnos sus clases? ¿Estás usando código primero? ¿Algún código de mapeo que puedas compartir? –
¿Qué es un tipo de 'consulta'? –
@LadislavMrnka Agregué el tipo de consulta –