Bonne façon de supprimer l'enregistrement dans LINQ to entities
J'ai juste une situation très simple où tous j'ai besoin est de supprimer l'enregistrement à l'aide de Linq2Entities. J'ai essayé de faire quelques recherches et ne peut toujours pas trouver la bonne façon de le faire.
Voici mon code simple:
[DataObjectMethod(DataObjectMethodType.Delete)]
public void DeleteEmployee(Employee z)
{
using (var ctx = new MyEntity())
{
var x = (from y in ctx.Employees
where y.EmployeeId == z.EmployeeId
select y).FirstOrDefault();
ctx.DeleteObject(x);
ctx.SaveChanges();
}
}
[DataObjectMethod(DataObjectMethodType.Select)]
public List<Employee> GetAllEmployee()
{
using (var ctx = new MyEntity())
{
var x = from y in ctx.Employees
select y;
return x.ToList();
}
}
Je peux supprimer un dossier en particulier, si par exemple je attribuer y.EmployeeName == "Harold Javier" à la Suppression de la méthode ci-dessus, mais quand j'assigne y.EmployeeId == z.EmployeeId pour le code ci-dessus, le supprimer ne fonctionne pas. (Note: Employé est la clé primaire de la table Employee)
Quel est le problème avec votre code? Toutes les erreurs? poste si.
Nous pouvons compiler le code et il semble bon. Mais quand on l'utilise avec l'ObjectDataSource (ASP.NET WebForm), le bouton Supprimer ne fonctionne pas.
Essayez
Le code est ok. Est-il une exception? Qu'advient-il si vous passez dans le débogueur?
L'utilisation du débogueur, veuillez vérifier si le
Nous pouvons compiler le code et il semble bon. Mais quand on l'utilise avec l'ObjectDataSource (ASP.NET WebForm), le bouton Supprimer ne fonctionne pas.
Essayez
ctx.Employees.DeleteOnSubmit(x)
au lieu de ctx.DeleteObject(x)
Le code est ok. Est-il une exception? Qu'advient-il si vous passez dans le débogueur?
L'utilisation du débogueur, veuillez vérifier si le
z
objet est correctement créé, et si son EmployeeId
existe réellement dans votre base de données.OriginalL'auteur Harold Javier | 2013-03-18
Vous devez vous connecter pour publier un commentaire.
Je pense que c'est la meilleure option de supprimer
à mes côtés
DeleteObject
ne fonctionne pas donc j'utiliseRemove
OriginalL'auteur Sanket Gandhi
vous devez d'abord vérifier que si il existe un enregistrement avant de le supprimer;
Toujours vérifier pour les valeurs null, avant de supprimer quelque chose. Parce qu'un utilisateur peut changer l'Id (querystring) et essayer différentes combinaisons.
J'ai toujours utilisé la fonction de Suppression comme une méthode POST (
[HttpPost]
), pas un get, ce qui élimine la nécessité de sécuriser la chaîne de requête. Null contrôles sont toujours bonnes pratiques, mais il n'est pas pertinent d'OP question et aussi pas le meilleur moyen de sécuriser votre application.OriginalL'auteur DotNet Dreamer
J'ai décidé de répondre à ma propre question.
Ma fonction de suppression a travaillé quand j'ai fait la suivante:
Je sais qu'il pourrait être une meilleure approche que ça, mais ça marche pour moi pour le moment.
OriginalL'auteur Harold Javier
La réponse ci-dessus peuvent être dépassées... La DeleteObject méthode ne semble pas exister dans la version actuelle de l'ENtity Framework. J'ai dû utiliser la méthode Remove.
OriginalL'auteur Scooter
@Harold, je sais que ce post est assez ancien, mais je pense qu'il est important de répondre à votre question initiale et de la réponse. Votre solution peut-être travaillé dans votre situation, mais il ya un couple de problèmes.
Tout d'abord, votre code d'origine a été la sélection de l'enregistrement à supprimer basé sur un passé en paramètre. Votre solution est la suppression de l'enregistrement avec le plus Employé. Qui pourrait être ce que vous voulez, mais probablement pas.
Le deuxième problème est que deux accès base de données sont nécessaires à l'accomplissement de la supprimer. La première est d'obtenir l'entité à supprimer la seconde pour effectuer la suppression.
L'extrait de code suivant supprime le besoin de le lire et supprimer employé "z". Cela devrait donner le résultat désiré, et effectuer beaucoup mieux.
OriginalL'auteur Jim Reineri
C'est probablement parce que le contexte est différent sur chaque demande (var ctx = new MyEntity()). Essayez d'utiliser cette
Et supprimer est comme
OriginalL'auteur Janne Matikainen