Почему не увидел 10 записей в базе данных? - PullRequest
1 голос
/ 30 ноября 2009

Я использую JMeter для тестирования своего веб-приложения. и мой тестовый пример заключается в добавлении записи в базу данных. а затем я установил «количество пользователей потоков» на 20, это означает, что он будет симулировать работу 20 пользователей одновременно. а затем я запускаю тестовый пример. Но в конце концов я обнаружил, что система не создает 20 записей в базе данных, а просто создает 13 записей в базе данных.

Я хочу знать, почему это произошло? Возможно ли это потому, что в моем веб-приложении я не добавил «синхронизированный» перед методом добавления записей? Я использовал linq, если два пользователя отправят запрос на создание записи на сервер одновременно, что произойдет? Просто создать запись или может успешно создать две записи, или неизвестно?

Ниже приведен пример кода для создания записи в базе данных:

       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;
        }
    }

1 Ответ

0 голосов
/ 30 ноября 2009

сама база данных должна быть ACID-совместимой, поэтому я сомневаюсь, что проблема с базой данных, когда дело доходит до синхронизации. если вы вставляете новую запись, и эта запись вводится с помощью чего-то вроде целого числа с автоинкрементом, база данных не будет ее растирать, пока вы не скажете обновить ее по этому идентификатору, а не вставите новую запись. но поскольку вы не пишете SQL, он действительно знает, что вы указываете базе данных делать.

Я бы предложил удалить linq из уравнения и написать это вручную. то, что вы тестируете, выглядит очень простой операцией "upsert".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...