LINQ to SQL: Supprimer une entité (par ID) avec une requête
J'ai travaillé avec LINQ to SQL pour un peu de temps maintenant, et quand il s'agit de la suppression d'une entité à partir de la DB, j'ai toujours appelé la table .DeleteOnSubmit et passés dans l'entité. Parfois, je l'ai trouvé moi-même écrit quelque chose comme:
db.Users.DeleteOnSubmit(db.Users.Where(c => c.ID == xyz).Select(c => c).Single());
Bien sûr, cela provoque deux requêtes. L'un pour obtenir l'entité correspondant aux critères, et puis un autre pour le supprimer. Souvent, j'ai l'ID de l'enregistrement, j'ai besoin d'enlever et je me demandais si il existe un moyen plus direct pour supprimer une ligne d'une table via l'ID seulement?
Vous devez vous connecter pour publier un commentaire.
Voici une solution...
Ce n'est pas mon code! Voir pour l'explication - http://msmvps.com/blogs/omar/archive/2008/10/30/linq-to-sql-delete-an-entity-using-primary-key-only.aspx
Espère que cette aide.
Le faire sans que la main de l'outillage SQL par une fixation partielle d'un objet et de le supprimer:
Facile. Vous pouvez même écrire comme une extension de la méthode et de l'utilisation d'une dynamique de type de l'objet à représenter la clé, et utiliser la réflexion pour comprendre les propriétés clés, que je vais le laisser comme un exercice amusant pour le lecteur. E. g. mettre en œuvre Contexte.Supprimer(new { MyEntityId = xxx });
Je ne crois pas que Linq to Sql pouvez le faire en natif, bien que la rédaction d'une procédure stockée serait de vous donner ce que vous voulez, avec une syntaxe du type:
Ce serait requre écriture d'une procédure stockée pour chaque table, mais c'est une jolie somme insignifiante de SQL.
Découvrez ce blog, dans lequel l'auteur a créé une méthode d'extension qui génère sa propre instruction delete. Vous pourriez être en mesure de prendre ce concept et de courir avec lui pour créer une suppression de routine qui ne nécessite pas une sélection. L'inconvénient est, vous pourriez vous retrouver avec une méthode d'extension qui est spécifique à votre propre schéma.
Je comprends que vous voulez garder votre logique de la couche de base de données, mais dans ce cas je pense qu'il serait beaucoup plus simple pour aller à la procédure stockée route. Il ne serait pas soumis à des problèmes avec la étroitement associée logique d'accès aux données, depuis la suppression d'une ligne par id n'est pas probable que jamais besoin de refactoring.
Je sais que cette question est vieux, mais voici une nouvelle et (OMI) la meilleure solution.
J'ai essayé de faire la même chose quand j'ai couru à travers PLINQO. Très belle série d'extensions LINQ. Cette page décrit comment effectuer les supprime avec PLINQO de l'extension des méthodes qui ne nécessitent que l'1 aller-retour vers le serveur de base de données.
L'inconvénient est qu'il nécessite Codesmith à exécuter, ce qui est un peu cher.
Je suis à l'aide de l'extension suivante méthodes, l'utilisation: