Pregunta

Uso JMeter para probar mi aplicación web. y mi caso de prueba es agregar un registro en la base de datos. y luego configuro el " número de usuario de hilo " a 20, significa que simulará el trabajo de 20 usuarios al mismo tiempo. y luego ejecuto el caso de prueba. Pero finalmente descubrí que el sistema no creó 20 registros en la base de datos, sino que solo creó 13 registros en la base de datos.

Quiero saber por qué sucedió esto. ¿Es posible que porque en mi aplicación web no agregué un "sincronizado"? frente al método de agregar registros? Usé linq, si dos usuarios publican una solicitud para crear un registro en el servidor al mismo tiempo, ¿qué sucederá? ¿Simplemente crea un registro o puede crear con éxito dos registros, o desconocido?

El siguiente es el código de muestra para crear un registro en la base de datos:

       public int SaveEventGroup(int id, Models.Entities.EventGroup e, Nullable<int> setpublish)
    {
        try
        {
            Entities.EventGroup db;
            if (id == 0)
            {
                db = new Entities.EventGroup();
                db.CreatedBy = e.CreatedBy;
                db.CreateDatetime = DateTime.Now;
                db.Status = true;
            }
            else
            {
                db = this.GetEventGroup(id);
            }

            db.NameCN = e.NameCN;
            db.NameEN = e.NameEN;
            db.NameZH = e.NameZH;
            db.NamePT = e.NamePT;
            db.DisplayOrder = GetGroupMaxDisplayOrder() + 1;

            if (setpublish == null)
            {
                db.PublishStatus = false;
                db.PublishDatetime = null;
                db.UpdateDatetime = DateTime.Now;
                db.UpdatedBy = e.UpdatedBy;
            }

            if (id == 0)
                dataContext.AddToEventGroupSet(db);

            dataContext.SaveChanges();

            return db.Id;
        }
        catch (Exception ex)
        {
            log.Error(ex.Message, ex);
            throw ex;
        }
    }
¿Fue útil?

Solución

la base de datos en sí misma debe ser compatible con ACID, por lo que dudo que el problema sea con la base de datos cuando se trata de sincronización. si inserta un nuevo registro y ese registro está tecleado por algo como un entero de incremento automático, la base de datos no lo pisoteará a menos que le diga que se actualice por esa identificación, en lugar de insertar un nuevo registro. pero como no está escribiendo el SQL, quién sabe realmente lo que le está ordenando a la base de datos que haga.

Sugeriría eliminar linq de la ecuación y escribir esto manualmente. lo que está probando parece ser un muy sencillo "upsert" operación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top