Quelle est la meilleure façon de vérifier si un objet existe dans la base de données du point de vue des performances? J'utilise Entity Framework 1.0 (ASP.NET 3.5 SP1).
114
Quelle est la meilleure façon de vérifier si un objet existe dans la base de données du point de vue des performances? J'utilise Entity Framework 1.0 (ASP.NET 3.5 SP1).
Si vous ne souhaitez pas exécuter SQL directement, le meilleur moyen est d'utiliser Any () . C'est parce que Any () reviendra dès qu'il trouvera une correspondance. Une autre option est Count () , mais cela peut nécessiter de vérifier chaque ligne avant de revenir.
Voici un exemple de son utilisation:
if (context.MyEntity.Any(o => o.Id == idToMatch))
{
// Match!
}
Et dans vb.net
If context.MyEntity.Any(function(o) o.Id = idToMatch) Then
' Match!
End If
T
à une interface qui estIEnumerable
et retournez des objets qui contiennent unId
, vous devriez pouvoir utiliser votre fonction génériqueIsExists<T>()
.Du point de vue des performances, je suppose qu'une requête SQL directe utilisant la commande EXISTS serait appropriée. Voir ici comment exécuter SQL directement dans Entity Framework: http://blogs.microsoft.co.il/blogs/gilf/archive/2009/11/25/execute-t-sql-statements-in-entity-framework- 4.aspx
la source
J'ai dû gérer un scénario où le pourcentage de doublons fournis dans les nouveaux enregistrements de données était très élevé et où des milliers d'appels à la base de données étaient effectués pour vérifier les doublons (le processeur a donc envoyé beaucoup de temps à 100%). Finalement, j'ai décidé de garder les 100 000 derniers enregistrements en mémoire cache. De cette façon, je pouvais vérifier les doublons par rapport aux enregistrements mis en cache, ce qui était extrêmement rapide par rapport à une requête LINQ sur la base de données SQL, puis écrire tous les enregistrements véritablement nouveaux dans la base de données (ainsi que les ajouter au cache de données, ce que je triés et coupés pour garder sa longueur gérable).
Notez que les données brutes étaient un fichier CSV contenant de nombreux enregistrements individuels devant être analysés. Les enregistrements de chaque fichier consécutif (qui arrivaient à un taux d'environ 1 toutes les 5 minutes) se chevauchaient considérablement, d'où le pourcentage élevé de doublons.
En bref, si vous avez des données brutes horodatées, à peu près dans l'ordre, l'utilisation d'un cache mémoire peut aider à la vérification de la duplication des enregistrements.
la source
Je sais que c'est un fil très ancien, mais juste au cas où quelqu'un comme moi aurait besoin de cette solution, mais dans VB.NET, voici ce que j'ai utilisé en fonction des réponses ci-dessus.
la source
J'ai eu quelques problèmes avec cela - ma EntityKey se compose de trois propriétés (PK avec 3 colonnes) et je ne voulais pas vérifier chacune des colonnes car ce serait moche. J'ai pensé à une solution qui fonctionne à tout moment avec toutes les entités.
Une autre raison à cela est que je n'aime pas attraper UpdateExceptions à chaque fois.
Un peu de réflexion est nécessaire pour obtenir les valeurs des propriétés clés.
Le code est implémenté comme une extension pour simplifier l'utilisation comme:
Regarde:
la source
Je viens de vérifier si l'objet est nul, cela fonctionne à 100% pour moi
la source
Pourquoi ne pas le faire?
la source
Meilleure façon de le faire
Indépendamment de ce qu'est votre objet et de la table de la base de données, la seule chose dont vous avez besoin est la clé primaire de l'objet.
Code C #
Code VB.NET
la source