Генерация нового Guid в коде для метода контроллера POST - PullRequest
0 голосов
/ 21 февраля 2020

Я работаю над новым API для моей игры, используя NetCore 3 Entity Framework. Я создал весь код и создал свою базу данных с помощью команды scaffolding Scaffold-DbContext. Я все еще использую старую базу данных, потому что она массивна, и я не хочу с ней связываться.

В моем новом API я создал метод POST для одного из моих контроллеров.

Я хочу, чтобы API сгенерировал новый guid для столбца первичного ключа DungeonId.

После поиска / исследования я подумал, что нашел простой ответ, который просто сделал это для моей модели:

    [Key]
    public Guid DungeonId { get; set; } = Guid.NewGuid();

Я думал, что я умный и умный, но я не такой.

Потому что, как я вижу сейчас, он будет генерировать новый guid каждый раз, когда я пытаюсь использовать модель в GET, PUT, или DELETE запрос.

Что, очевидно, не будет работать.

Итак, я переместил новое поколение Guid в метод POST в моем контроллере следующим образом:

// POST: api / DungeonsList [HttpPost] publi c asyn c Task> PostDungeonList (DungeonList dungeonList) {

        dungeonList.DungeonId = Guid.NewGuid();

        _context.DungeonList.Add(dungeonList);
        try
        {
            await _context.SaveChangesAsync();
        }
        catch (DbUpdateException)
        {
            if (DungeonListExists(dungeonList.DungeonId))
            {
                return Conflict();
            }
            else
            {
                throw;
            }
        }

        return CreatedAtAction("GetDungeonList", new { id = dungeonList.DungeonId }, dungeonList);
    }

На этот раз, похоже, работает. Он генерирует новый Guid, когда POST новое подземелье, и использует существующий dungeonId при обновлении или удалении.

ОДНАКО процесс POST, кажется, занимает около 2 секунд дольше.

Я не уверен почему добавление метода Guid.NewGuid () может сделать это, но, похоже, это так.

Так что я не должен делать это правильно.

Есть ли другое место, где я должен быть создание нового guid?

Спасибо!

...