Ich habe ein ASP.NET Core 3.1-basiertes Projekt, in dem ich Entity Framework Core 3.1 als ORM verwende.
Ich habe die folgenden zwei Entitätsmodelle
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; }
}
Ich versuche, alle Eigenschaften abzufragen, zu denen ein Benutzer eine Beziehung hat. Das PropertyToList
Objekt teilt mir mit, ob ein Benutzer mit einer Eigenschaft verbunden ist. Folgendes habe ich getan
// 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();
Aber dieser Code löst diesen Fehler aus
Include wurde für nicht abfragbare Entitäten verwendet
Was könnte dieses Problem verursachen? Wie kann ich es reparieren?
Eine Beobachtung, Ihre Domain-Modelle PropertyToList und Property haben beide virtuelle Eigenschaften. Darüber hinaus verwenden Sie den Operator "Einschließen", um diese Eigenschaften auszuwählen.
Dies ist nicht erforderlich. Wenn die Eigenschaft mit virtual definiert ist, wird sie verzögert geladen. Ein Include wird also nicht benötigt. Das verzögerte Laden ist nicht die empfohlene Methode. Die Verwendung von include ist besser, sodass Sie nur die erforderlichen Diagrammeigenschaften auswählen.