ahmed_sa Ответов: 3

Как получить последнюю запись+1 при создании нового сотрудника в проекте web API ?


Проблема

Как представить создание новой записи сотрудника с помощью веб-API ?

я работаю над проектом asp.net ядро 2.1

я создаю контроллер работника контроллер MVC и в нем я создаю действие результата для создания нового вида работника .

Создайте функцию с типом get и покажите, что последняя запись существует в базе данных плюс одна, как показано ниже


public IActionResult Create()

        {

           var model = new Employee();

            if (id == null)

            {

                 
           model.EmployeeId = _repository.GetAll().Max(Employee => Employee.EmployeeId) + 1;

             }

            return View(model);

        }

Мне нужно преобразовать результат действий создать веб-API для подключения к угловым
так что
Как преобразовать функцию в результате действий создать веб-API ?
так что я создаю новый контроллер web API






Что я уже пробовал:

[Produces("application/json")]
    [Route("api/Employee")]
    public class EmployeeController : Controller
    {
//how to write code for create by using web api

    }

3 Ответов

Рейтинг:
2

OriginalGriff

Не делай этого! Никогда не пытайтесь "предварительно распределить" идентификационные номера, что приводит к тонким и прерывистым ошибкам в производстве, когда у вас есть несколько пользователей, обращающихся к БД, которые очень трудно отследить и еще труднее распутать данные.

Вместо этого посмотрите на использование поля идентификатора БД - БД будет управлять идентификатором для вас и давать вам новое значение каждый раз, когда вы добавляете строку.
Поле идентификации MVC - поиск Google[^]


Afzaal Ahmad Zeeshan

Это даст ему некоторые необычные скачки в значениях идентификатора, если он не использовал его должным образом, или потребует от него правильной очистки данных тоже.

https://stackoverflow.com/questions/14162648/sql-server-2012-column-identity-increment-jumping-from-6-to-1000-on-7th-entry

Richard Deeming

Один из тех прекрасных багов, где все обходные пути, задокументированные на сайте обратной связи Microsoft "Connect", были выброшены, когда они решили его удалить. 🤦‍♂️

К счастью, похоже, что Митандрир задокументировал основные обходные пути в этом потоке, а не полагался на ссылку на отчет об ошибке подключения.

Рейтинг:
2

Afzaal Ahmad Zeeshan

Помимо того, что говорит Решение 1, я должен рекомендовать другой подход. Этот подход заключается в использовании string в качестве поля ID в ядре Entity Framework, и платформа автоматически будет использовать Guid для генерации уникальных идентификаторов. Я всегда этим пользовался, и это позволяет мне спокойно спать по ночам.

Внесите следующие изменения,

public class Employee {
    public string EmployeeId { get; set; }
}
И оставьте все остальное ядру EF.

Каковы же минусы? Ну, вы не можете увидеть, был ли сотрудник зарегистрирован раньше или позже, просто взглянув на его удостоверение личности. Однако вы можете сказать, что по их joiningDate поле. Кроме того, SQL Server особенно использует начальное значение. Это может расти экспоненциально и приведет к таким ответам, как, 1, 2, 3, 10, 15, 17, 18, 100, 101, 500, и так далее. Неужели ты этого хочешь? Не совсем. Таким образом, примите мой совет, если можете, используйте строку в качестве поля первичного ключа и живите в мире. :-)

Увеличение идентификатора столбца SQL Server 2012 с 6 до 1000+ при 7 - й записи- переполнение стека[^]

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


Richard Deeming

Почему? string и нет Guid?

Afzaal Ahmad Zeeshan

Честно говоря, я еще не пробовал этого, идея состоит в том, чтобы использовать тип UUID для хранения данных, и поскольку EF должен сопоставить столбец с UUID, string может быть полезен—мне придется попробовать его с Guid, и это тоже с различными источниками данных, а не только с SQL Server.

Хотя спасибо за подсказку. :-)

Кроме того, недавно я начал использовать Sequelize ORM, и у него есть тип данных для этого, который я использую. Я подумаю об использовании этого когда-нибудь.

Рейтинг:
1

Patrice T

Цитата:
Как получить последнюю запись+1 при создании нового сотрудника в проекте web API ?

Плохая идея !
Этот подход забывает,что приложение является сетевым, это означает, что у вас может быть 2 пользователя или более, которые добавляют сотрудника одновременно, это означает, что все они будут иметь один и тот же "следующий идентификатор сотрудника".
Единственный безопасный подход заключается в том, чтобы сервер генерировал идентификатор при создании записи.
SQL автоматическое увеличение поля[^]