Recientemente recibí un informe de error de un cliente y no tengo suerte para resolverlo. Espero que alguien me pueda dar una idea de lo que puede estar mal.Error al eliminar un registro utilizando Linq2SQL
El error parece bastante simple:
Csla.DataPortalException: DataPortal.Delete falló (System.InvalidOperationException: Secuencia contiene más de un elemento a System.Linq.Enumerable.SingleOrDefault [TSource] (fuente IEnumerable`1)
Aquí es mi método DataPortal_Delete, que toma la fileid (PK) como parámetro.
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();
}
}
lo primero que compruebo era ver si había otro registro con el mismo fileid (a pesar de ser la prima clave, esto debería ser imposible). Todos los FileIds eran de hecho únicos. Lancé la aplicación que se conectaba a la base de datos del cliente e intenté eliminar el registro y funcionó sin problemas. El técnico de TI en el sitio del cliente usó el "Registrador de pasos del problema" para enviarme capturas de pantalla paso a paso de las acciones realizadas por el usuario. Nada fuera de lo común, y cuando usaba una máquina diferente, podía eliminar el registro sin ningún error. Al parecer, esto solo ocurre cuando la aplicación se ejecuta en Windows 7.
Dicho esto, ¿hay alguna idea de qué podría estar causando esto?
Files.FileId es la clave principal de esa tabla? –
¿Está seguro de que este fragmento de código genera el error? El error hace referencia a SingleOrDefault, pero la función está utilizando Single. – gfrizzle
¿Son los FileSources nulos? Si estos son objetos diferentes, ¿no tiene que usar un include para obtenerlos antes de poder eliminarlos? – awright18