У меня может быть слегка наивный вопрос, но я никогда раньше не работал с базами данных.Я инженер .NET и использую Dapper для доступа к базе данных SQL Server.
Ситуация следующая: у меня есть денормализованная таблица для сохранения нескольких типов объектов.У каждого есть составной ключ (type, id, owner_id), и каждая строка ключа имеет строковый тип (но это не важно).И, скажем, я пишу в базу много интересов для разных пользователей (Bulk post).Чтобы они не повторялись, мне нужно сделать запрос и определить, какие уже присутствуют в базе данных.
Итак, у меня есть этот код в моем InterestService
классе:
private IEnumerable<Interest> GetAlreadyExistingInterestsFor(IEnumerable<Interest> interestsForCreating) =>
_interestRepository.GetInterests(interestsForCreating.Select(interest => interest.Id).ToList(),
interestsForCreating.Select(interest => interest.UserId).ToList());
После этого у меня есть немного логики и так далее.Это не важно.
InterestRepository
метод GetInterests
выглядит следующим образом:
public GetInterests(IList<string> interestIds, IList<string> userIds)
{
var query = @"SELECT type, id, owner_id
FROM entities
WHERE type = 'interest'
AND id IN @InterestIds
AND owner_id IN @UserIds";
return _dbContext.ExecuteQuery(query, new { InterestIds = interestIds, UserIds = userIds });
}
Код может содержать ошибки, потому что сейчас у меня нет возможности получить доступ к рабочей средено я думаю, что идея ясна.Итак, вопрос в том, является ли это лучшим подходом к выполнению запроса.А если есть лучшее, то что это.