una trabajos trabajo realizados publico propiedad notario notarial modelo manutencion jurada ingresos declaracion constancia como bienes ante c# linq linq-to-sql submitchanges

trabajos - No se encontró la fila o se modificó el error LINQ C#en una declaración simple



declaracion jurada de propiedad de bienes (4)

Eche un vistazo a la propiedad de conexión "No Count" a nivel de servidor de servidor SQL

1. Haga clic derecho en la conexión del servidor Sql en el Explorador de objetos -> Propiedad
2. Ir a la pestaña / página de conexión
3. Busque la opción de conexión predeterminada "sin contar"
4. Asegúrese de que esta opción no esté marcada.

En primer lugar, no hay ninguna posibilidad de que esto sea un problema de varios usuarios, ya que estoy trabajando localmente en una versión dev de la base de datos.

Recibo el error no muy explicativo de Row not found or changed que se produce cuando realizo db.SubmitChanges (). Si rompo la ejecución justo antes de que se produzca el SubmitChanges (), ¡puedo verificar en SQL Server Management Studio y la fila existe!

Aquí está el código para toda la función, solo para ponerlo en contexto para cualquiera que quiera ayudar, pero la línea del problema está justo al final (línea 48).

Actualizar Esta es una muy extraña: el error se debe a la actualización de Trans.Url correspondiente (consulte la penúltima línea de código). Al comentar esta línea no se produce el error, incluso si el título Trans.title correspondiente aún se actualiza.

private static void MenuItemUpdate(int languageId, NavigationItem item) { using (var db = DataContextFactory.Create<MyDataContext>()) { // Select existing menu item from database. var dbItem = (from i in db.MenuItems where i.Id == item.Id select i).Single(); // Obtain ID of link type. dbItem.FkLinkTypeId = GetLinkTypeByName( Enum.GetName(typeof (NavigationItemLinkType), item.LinkType)).Id; // Update the Link field with what is given. dbItem.Link = item.Link; db.SubmitChanges(); // Item already exists and needs editing. // Get associated translations. var trans = from t in db.MenuItemTranslations where t.FkMenuItemId == item.Id select t; // If translation exists for given language, edit it. var matchingTrans = (from t in trans where t.FkLanguageId == languageId select t).SingleOrDefault(); if (matchingTrans == null) { // No matching translation - add one. var newDbTrans = new MenuItemTranslation { FkMenuItemId = item.Id, FkLanguageId = languageId, Title = item.Title, Url = item.FriendlyUrl }; db.MenuItemTranslations.InsertOnSubmit(newDbTrans); db.SubmitChanges(); } else { // Matching translation - edit it. matchingTrans.Title = item.Title; matchingTrans.Url = item.FriendlyUrl; db.SubmitChanges(); // WTF ERROR: Row not found or changed. } } }


En cuanto a la salida del Analizador de SQL, me ayudó a encontrar la respuesta a esto. Se generó una mala pieza de SQL que terminó con WHERE 0 = 1 ... un error obvio.

Resulta que el campo simplemente se había cambiado para permitir que los nulos lo permitiera otro desarrollador, y el archivo Linq-to-SQL no se había actualizado en consecuencia.

En resumen, si el mensaje de error Row not found or changed parece haberse generado sin ninguna razón, asegúrese de que el esquema de la base de datos coincida exactamente con su archivo .dbml; de lo contrario, aparecerá este mensaje de error en los campos que tengan esquemas ligeramente diferentes.


Otra posibilidad que he encontrado para agregar a la excelente lista de respuestas aquí:

Cuando se utiliza una columna que no admite nulos en una base de datos, luego se asigna a un tipo de datos que es intrínsecamente anulable (en este ejemplo, el tipo de base de datos BLOB NO NULL está asignado a una matriz de bytes en c #), puede terminar en una situación en la que La base de datos con la misma matriz de bytes provoca que se genere este error.

Ejemplo: tiene un sitio web que le permite al usuario cargar una imagen en la base de datos. Su tabla tiene un blob (imagen en el servidor SQL, lo que sea) que no admite nulos. El usuario elige actualizar el registro con la misma imagen exacta que ya está allí. La comprobación de actualización fallará. Arreglé esto haciendo primero una comprobación .SequenceEqual () y luego llamando a .SubmitChanges () en el objeto de contexto si la matriz de bytes entrantes no era igual a la existente.


Tuve este problema incluso cuando el esquema de la base de datos y el dbml coincidían exactamente. El problema era que estaba tratando de cambiar una entidad e insertar entidades en una sola declaración SubmitChanges. Lo arreglé haciendo SubmitChanges en cada operación en lugar de hacerlo de una vez.

Todo esto estaba en el alcance de una transacción, por lo que puede tener algo que ver con eso, pero no estoy seguro.