У меня есть простой проект, в котором я определяю две модели и соединение между ними. Я опустил все бесполезные поля для вопроса, но в каждой таблице есть ключ.
public class Статья: Таблица { [JsonPropertyName("тело")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] общедоступная строка? Тело {получить; набор; } [JsonPropertyName("теги")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] общедоступный виртуальный ICollection? Теги {получить; набор; } } общественный класс Тег: Таблица { [JsonPropertyName("имя")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] общедоступная строка? Имя {получить; набор; } [JsonPropertyName("статьи")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] публичный виртуальный ICollection? Статьи { получить; набор; } } С помощью Entity Framework Core в приложении ASP.NET Core на базе NET7 были созданы 3 таблицы: Article, Tags и < code>ArticleTag (который я не определил). Таблица ArticleTag имеет два поля (как вы понимаете): ArticleId и TagsId.
Я понимаю цель: статья может иметь более одного тега. Итак, эта таблица связывает две таблицы отношением многие-ко-многим. Кроме того, это то, чем я хочу заниматься.
При запуске приложения создается база данных, но также имеется начальное значение для Тегов. Я хочу использовать только эти теги.

На основе этой модели я создал API POST, который получает json для статьи и сохраняет его в базе данных.

Функция сохранения в базе данных является общей
public async Task AddAsync (Tentity) { ждут _db.Set().AddAsync(entity); ждут _db.SaveChangesAsync(); возврат объекта; } Когда я вызываю API с действительным json, со всеми данными и списком тегов со всеми подробностями, я получаю ошибку
Microsoft.EntityFrameworkCore.DbUpdateException: произошла ошибка при сохранении изменений объекта. Подробности смотрите во внутреннем исключении.
---> Microsoft.Data.SqlClient.SqlException (0x80131904): невозможно вставить явное значение для столбца идентификаторов в таблице «tbl_Tags», когда Для IDENTITY_INSERT установлено значение OFF.
в Microsoft.Data.SqlClient.SqlConnection.OnError (исключение SqlException, Логическое значение BreakConnection, Action`1 WrapCloseInAction)
в Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException исключение, логическое значение BreakConnection, Action`1 WrapCloseInAction)
в Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, логическое значение callerHasConnectionLock, логическое значение asyncClose)
Очевидно, я понимаю ошибку. Невозможно добавить тот же тег еще раз, и это нормально. Итак, как я могу решить эту проблему?
Нужно ли мне разделить запрос в API и сначала создать Article, а затем добавить запись в ArticleTag? Как добавить новые записи в ArticleTag, если у меня нет модели для этой таблицы? Нужно ли добавлять модель для таблицы ArticleTag?