Tengo un proyecto basado en ASP.NET Core 3.1 donde estoy usando Entity Framework Core 3.1 como ORM.
Tengo los siguientes dos modelos de entidad
public class PropertyToList
{
public int Id { get; set; }
public int ListId { get; set; }
public int UserId { get; set; }
public int PropertyId { get; set; }
// ... Other properties removed for the sake of simplicity
public virtual Property Property { get; set; }
}
public class Property
{
public int Id { get; set; }
// ... Other properties removed for the sake of simplicity
public int TypeId { get; set; }
public int StatusId { get; set; }
public int CityId { get; set; }
public virtual Type Type { get; set; }
public virtual Status Status { get; set; }
public virtual City City { get; set; }
}
Estoy tratando de consultar todas las propiedades con las que un usuario tiene relación. El objeto PropertyToList
me dice si un usuario está relacionado con una propiedad. Esto es lo que he hecho
// I start the query at a relation object
IQueryable<Property> query = DataContext.PropertyToLists.Where(x => x.Selected == true)
.Where(x => x.UserId == userId && x.ListId == listId)
// After identifying the relations that I need,
// I only need to property object "which is a virtual property in" the relation object
.Select(x => x.Property)
// Here I am including relations from the Property virtual property which are virtual properties
// on the Property
.Include(x => x.City)
.Include(x => x.Type)
.Include(x => x.Status);
List<Property> properties = await query.ToListAsync();
Pero ese código arroja este error
Incluir se ha utilizado en entidades no consultables
¿Qué podría estar causando este problema? ¿Cómo puedo arreglarlo?
Una observación, sus modelos de dominio PropertyToList y Property tienen propiedades virtuales. Además de eso, está utilizando el operador Incluir para seleccionar estas propiedades.
Esto no es necesario, cuando la propiedad se define con virtual, entonces se cargará de forma diferida. Por lo tanto, no es necesario incluir. La carga diferida no es la forma recomendada, el uso de incluir es mejor, por lo que selecciona solo las propiedades del gráfico que son necesarias.