Wie lässt sich aus Sicht der Leistung am besten überprüfen, ob ein Objekt in der Datenbank vorhanden ist? Ich verwende Entity Framework 1.0 (ASP.NET 3.5 SP1).
114
Wie lässt sich aus Sicht der Leistung am besten überprüfen, ob ein Objekt in der Datenbank vorhanden ist? Ich verwende Entity Framework 1.0 (ASP.NET 3.5 SP1).
Wenn Sie SQL nicht direkt ausführen möchten, verwenden Sie am besten Any () . Dies liegt daran, dass Any () zurückkehrt, sobald eine Übereinstimmung gefunden wird. Eine andere Option ist Count () , dies muss jedoch möglicherweise jede Zeile überprüfen, bevor Sie zurückkehren.
Hier ist ein Beispiel für die Verwendung:
if (context.MyEntity.Any(o => o.Id == idToMatch))
{
// Match!
}
Und in vb.net
If context.MyEntity.Any(function(o) o.Id = idToMatch) Then
' Match!
End If
T
auf eine Schnittstelle beschränkenIEnumerable
und Objekte zurückgeben, die eine enthaltenId
, sollten Sie in der Lage sein, Ihre generische Funktion zu verwendenIsExists<T>()
.Aus Sicht der Leistung denke ich, dass eine direkte SQL-Abfrage mit dem Befehl EXISTS angemessen wäre. Hier erfahren Sie, wie Sie SQL direkt in Entity Framework ausführen können: http://blogs.microsoft.co.il/blogs/gilf/archive/2009/11/25/execute-t-sql-statements-in-entity-framework- 4.aspx
quelle
Ich musste ein Szenario verwalten, in dem der Prozentsatz der in den neuen Datensätzen bereitgestellten Duplikate sehr hoch war und so viele tausend Datenbankaufrufe durchgeführt wurden, um nach Duplikaten zu suchen (die CPU hat also viel Zeit mit 100% gesendet). Am Ende habe ich beschlossen, die letzten 100.000 Datensätze im Speicher zu speichern. Auf diese Weise konnte ich nach Duplikaten für die zwischengespeicherten Datensätze suchen, was im Vergleich zu einer LINQ-Abfrage für die SQL-Datenbank extrem schnell war, und dann alle wirklich neuen Datensätze in die Datenbank schreiben (sowie sie dem Datencache hinzufügen, den ich auch habe sortiert und zugeschnitten, um die Länge überschaubar zu halten).
Beachten Sie, dass die Rohdaten eine CSV-Datei waren, die viele einzelne Datensätze enthielt, die analysiert werden mussten. Die Datensätze in jeder aufeinanderfolgenden Datei (die alle 5 Minuten etwa 1 betrug) überlappten sich erheblich, daher der hohe Prozentsatz an Duplikaten.
Kurz gesagt, wenn Sie Rohdaten mit Zeitstempel eingegeben haben, kann die Verwendung eines Speichercaches bei der Überprüfung der Datensatzduplizierung hilfreich sein.
quelle
Ich weiß, dass dies ein sehr alter Thread ist, aber nur für den Fall, dass jemand wie ich diese Lösung benötigt, aber in VB.NET habe ich Folgendes verwendet, basierend auf den obigen Antworten.
quelle
Ich hatte einige Probleme damit - mein EntityKey besteht aus drei Eigenschaften (PK mit 3 Spalten) und ich wollte nicht jede der Spalten überprüfen, da dies hässlich wäre. Ich dachte an eine Lösung, die jederzeit mit allen Entitäten funktioniert.
Ein weiterer Grund dafür ist, dass ich nicht jedes Mal UpdateExceptions abfangen möchte.
Ein wenig Reflexion ist erforderlich, um die Werte der Schlüsseleigenschaften zu erhalten.
Der Code wird als Erweiterung implementiert, um die Verwendung zu vereinfachen:
Guck mal:
quelle
Ich überprüfe nur, ob das Objekt null ist, es funktioniert 100% für mich
quelle
Warum nicht?
quelle
Der beste Weg, es zu tun
Unabhängig davon, was Ihr Objekt ist und für welche Tabelle in der Datenbank Sie nur den Primärschlüssel im Objekt benötigen.
C # -Code
VB.NET-Code
quelle