Ядро Entity Framwork - Возможно ли «вставить, если не существует»? - PullRequest
2 голосов
/ 14 марта 2019

В настоящее время я борюсь с простой проблемой SQL, которую, похоже, не могу решить с помощью «чистого» Entity Framework Core 2.2.

Как проверить, существует ли сущность во времявставить без выполнения следующего?

var entity = await _repository.Get(message.Id);

if(entity == null)
{
    entity = new Entity ();
    // do something with the entity
    await _repository.AddAsync(entity);
}
else
{
    // do something with the entity
    await _repository.Update(entity);
}

await _repository.SaveChangesAsync();

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

Существует ли лучший и более безопасный способ проверить, существует ли сущность в Entity Framework Core, без записиСам SQL?

1 Ответ

3 голосов
/ 14 марта 2019

В настоящее время Upsert изначально не поддерживается в EF Core (откройте проблему GitHub здесь: https://github.com/aspnet/EntityFrameworkCore/issues/4526#issuecomment-366818031)

Библиотека с открытым исходным кодом, расширяющая EF Core для поддержки этого, может быть найдена здесь: https://github.com/artiomchi/FlexLabs.Upsert

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