J'ai récemment reçu un rapport d'erreur d'un client et je n'ai aucune chance de le résoudre. J'espère que quelqu'un pourra me donner un aperçu de ce qui pourrait être mauvais.Erreur lors de la suppression d'un enregistrement à l'aide de Linq2SQL
L'erreur semble assez simple:
Csla.DataPortalException: DataPortal.Delete a échoué (System.InvalidOperationException: séquence contient plus d'un élément à System.Linq.Enumerable.SingleOrDefault [TSource] (source IEnumerable`1)
Voici ma méthode de DataPortal_Delete, qui prend la FileId (PK) en tant que paramètre.
private void DataPortal_Delete(SingleCriteria<File, Guid> criteria)
{
using (var ctx = ContextManager<Ronin.Data.RoninDataContext>
.GetManager(Database.ApplicationConnection, false))
{
var data = ctx.DataContext.Files
.Single(row => row.FileId == criteria.Value);
ctx.DataContext.FileSources.DeleteAllOnSubmit(data.FileSources);
ctx.DataContext.Files.DeleteOnSubmit(data);
ctx.DataContext.SubmitChanges();
}
}
la première chose que je vérifie était de voir s'il y avait un autre enregistrement du même FileId (bien être la prima clé ry, cela devrait être impossible). Tous les fichiers étaient en fait uniques. J'ai lancé l'application se connectant à la base de données client et j'ai essayé de supprimer l'enregistrement et cela a fonctionné sans aucun problème. Le responsable informatique du site client a utilisé le "Problem Step Recorder" pour m'envoyer des captures d'écran des actions prises par l'utilisateur. Rien d'extraordinaire, et quand il a utilisé une machine différente, il a pu effacer le dossier sans aucune erreur. Apparemment, cela ne se produit que lorsque l'application est exécutée dans Windows 7.
Cela dit, des idées sur ce qui pourrait être à l'origine de cela?
Files.FileId est la clé primaire sur cette table? –
Etes-vous sûr que l'erreur est générée par cet extrait de code? L'erreur fait référence à SingleOrDefault, mais la fonction utilise Single. – gfrizzle
Les fichiers sont-ils Nuls? Si ce sont des objets différents, ne devez-vous pas utiliser un include pour les obtenir avant de pouvoir les supprimer? – awright18