Ich habe folgende Datenbankkontext, die ich mit Entitry Framework verwendenICollection in Domain-Modell Leistung
public class MainContext: DbContext
{
public MainContext()
: base("name=MainContext")
{ }
public virtual DbSet<Device> Devices { get; set; }
public virtual DbSet<Point> Points { get; set; }
}
Mit folgenden Domain-Modell
public class Point
{
[Key]
public int Id { get; set; }
public string Info { get; set; }
public DateTime FixTime { get; set; }
public int DeviceId { get; set; }
public virtual Device Device { get; set; }
}
public class Device
{
[Key]
public int Id { get; set; }
public int SomeValue { get; set; }
public virtual ICollection<Point> Points { get; set; }
public bool IsActive()
{
Point lastPoint = Points.LastOrDefault();
if (lastPoint == null)
{
return false;
}
else
{
var diff = DateTime.Now - lastPoint.FixTime;
if (diff.TotalSeconds > 10)
{
return false;
}
else
{
return true;
}
}
}
}
ich vor großen Leistungsproblem Aufruf IsActive() -Methode in die Geräteklasse. Soweit ich das sehen kann, fragt es wegen des Aufrufs von Points.LastOrDefault() alle verfügbaren Datenbankeinträge für das Gerät ab und nicht nur das einzige. Ich verstehe, dass es wegen der Verwendung von ICollection in meiner Klasse ist, aber das ist Entity Framework-Nachfrage. Gibt es eine Möglichkeit, den einzigen Datensatz in einer solchen Situation abzufragen, oder ist es nur ich, die Methode an einem falschen Ort zu platzieren?
Nun, um mein Problem zu lösen, schließlich habe ich so etwas gemacht, aber ich fühle, dass es nicht der beste Weg ist, es sollte getan werden. – hitry