Создайте Как добавить запись с объектом зависимости с помощью Entity Framework Core?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Создайте Как добавить запись с объектом зависимости с помощью Entity Framework Core?

Сообщение Anonymous »


Я изучаю Entity Framework Core версии 8, используя проект Blazor. Сценарий довольно простой: мне нравится создавать простой блог. У меня есть объект Article, который имеет 2 свойства ICollection: Category и Tags

[Таблица("Статьи")] общественный класс Артикул: Стол { [JsonPropertyName("тело")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] общедоступная строка? Тело {получить; набор; } публичный ICollection? Категории {получить; набор; } публичный ICollection? Теги {получить; набор; } } Затем класс Категория определяется следующим образом (Тег аналогичен)

[Таблица("tbl_Categories")] общественный класс Категория: Стол { общедоступная строка? Имя {получить; набор; } публичный ICollection? Статьи { получить; набор; } } В базе данных у меня есть 3 таблицы: Статьи, Категории, и EF генерирует связанную таблицу с именем ArticleCategory. Эта таблица является связующим звеном между двумя основными таблицами, но в моем коде нет ее представления.

Проблема возникает, когда я хочу обновить объект Article. Если я передам существующие значения для Категории, я получу эту ошибку

Произошла ошибка при сохранении изменений сущности. Подробности смотрите во внутреннем исключении. ---> Microsoft.Data.SqlClient.SqlException (0x80131904): нарушение ограничения PRIMARY KEY «PK_ArticleCategory». Невозможно вставить дубликат ключа в объект «ArticleCategory». Повторяющееся значение ключа: (8, 15).

Итак, я думаю, мне сначала нужно удалить эту таблицу. Я написал этот код, чтобы удалить записи в таблице ссылок и затем вызвать обновление.

public void DeleteCategoriesByArticle (длинный идентификатор) { вар статья = localDb?.Статьи? .Include(a => a.Categories)? .Where(a => a.ID == id) .FirstOrDefault(); если (статья != ноль) { bool hasChanges = ложь; if (article.Categories != null && Article.Categories.Count() > 0) { статья.Категории?.Очистить(); имеетИзменения = Истина; } если (имеетИзменения) localDb?.SaveChanges(); } } После этого я вызываю функцию обновления. В этом случае я получаю еще одну ошибку

Экземпляр сущности типа «Статья» не может быть отслежен, поскольку другой экземпляр с тем же значением ключа для {'ID'} уже отслеживается. При присоединении существующих сущностей убедитесь, что присоединен только один экземпляр сущности с заданным значением ключа. Рассмотрите возможность использования DbContextOptionsBuilder.EnableSensitiveDataLogging, чтобы увидеть конфликтующие значения ключей.

После быстрого поиска я изменил способ получения записи

vararticle = localDb?.Articles? .AsNoTracking() .Include(a => a.Categories)? .Where(a => a.ID == id) .FirstOrDefault(); Теперь я не получаю ошибку Нарушение PRIMARY KEY, как раньше.

Как мне тогда обновить запись Статья?
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»