valores una tabla off modificar insertar identity_insert filas ejemplos datos cursores cambiar afectadas sql sql-server entity-framework entity-framework-4 triggers

sql - una - Solución para: La actualización de la tienda, la inserción o la eliminación afectaron a un número inesperado de filas(0)



insertar datos en una tabla sql server (9)

Encontré una solución para las personas que reciben una excepción:

La actualización, inserción o eliminación de la tienda afectó a un número inesperado de filas (0). Las entidades pueden haber sido modificadas o eliminadas desde que se cargaron las entidades. Actualice las entradas de ObjectStateManager.

Pero, de todos modos, tengo una pregunta.

Leí el tema: Entidad Marco: "La actualización, inserción o eliminación de la tienda afectó a un número inesperado de filas (0)". Para VMAtm, Robert Harvey

En mi caso, tuve, por ejemplo, artículos de mesa:

Articles ------------ article_id title date_cr date_mod deleted

Y tuve gatillo:

create trigger articles_instead_of_insert on articles instead of insert as SET NOCOUNT ON; insert into articles( article_id, title, date_cr, date_mod, deleted ) select user_id, title, isnull(date_cr, {fn NOW()}), isnull(date_mod, {fn NOW()}), isnull(deleted, 0) from inserted; go

Cuando elimino este disparador, no obtengo esta excepción. Entonces este gatillo es un problema. Y ahora tengo una pregunta: ¿por qué? ¿Debo hacer algo?


Encontré este error cuando actualizo la entidad y olvidé pasar el valor de la clave primaria ....

Entonces, la entidad puede actualizar el registro con referencia con la clave primaria

Solución: verifique si el valor de la clave primaria es aprobado o no para actualizar el registro dado. :)


Es mejor que actualice su método de guardado de esta manera ..... En caso de que llame savechange() método savechange() del contexto de la entidad después de cada addobject y deleteobject o modificación:

public void Save(object entity) { using (var transaction = Connection.BeginTransaction()) { try { SaveChanges(); transaction.Commit(); } catch (OptimisticConcurrencyException) { if (ObjectStateManager.GetObjectStateEntry(entity).State == EntityState.Deleted || ObjectStateManager.GetObjectStateEntry(entity).State == EntityState.Modified) this.Refresh(RefreshMode.StoreWins, entity); else if (ObjectStateManager.GetObjectStateEntry(entity).State == EntityState.Added) Detach(entity); AcceptAllChanges(); transaction.Commit(); } } }


Es porque tienes SET NOCOUNT ON .
La declaración EF SQL que genera SIEMPRE agrega una cláusula de where @@ROWCOUNT > 0 and [ID] = scope_identity() (por ejemplo).
Observe la cláusula where @@ROWCOUNT > 0 . Quítese su declaración SET NOCOUNT ON y debería funcionar.


Posible problema: colocaste ReadOnlyAttribute en los metadatos de tu clave de entidad, lo que hace que su valor se vuelva cero

[DisplayName("Student ID")] [ReadOnly(true)] public int StudentID { get; set; }

Solución: elimine ReadOnlyAttribute

[DisplayName("Student ID")] public int StudentID { get; set; }


Primero se usa el código de Entity Framework,

usando (MyDbContext db = new MyDbContext ()) {..

Agregando esto después de la línea que usa:

db.Configuration.ValidateOnSaveEnabled = true;


Solución:

try { context.SaveChanges(); } catch (OptimisticConcurrencyException) { context.Refresh(RefreshMode.ClientWins, db.Articles); context.SaveChanges(); }


Tenía InsertAsync configurando EntityState a Modified implementando un patrón Repository . Cuando depuré vi que la identificación de la entidad era 0

public async Task InsertAsync(T entity) { dbContext.Entry(entity).State = EntityState.Modified; await dbContext.SaveChangesAsync(); }

Cambiar el estado de la entidad a Agregado lo solucionó.

dbContext.Entry(entity).State = EntityState.Added;


Tuve el mismo error, entonces me di cuenta de que olvidé la clave primaria establecida en la tabla y establecí los valores de incremento ...