EF Core - отключенный удаленный дочерний элемент не удаленC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 EF Core - отключенный удаленный дочерний элемент не удален

Сообщение Anonymous »

При использовании EF Core 8 попытка удалить дочерний элемент отношения 1:n не удалась в новом контексте БД.
В одном контексте БД удалить его не составит труда. дочерний элемент из отношения 1:n, после SaveChanges() дочерний элемент также удаляется из базы данных.
Пример:

Код: Выделить всё

using (var db = new BloggingContext())
{
var blog = db.Blogs.Include(blog => blog.Posts).FirstOrDefault(b => b.BlogId == blogId);
if (blog != null)
{
blog.Url += $"/changed";
if (blog.Posts.Count > 0)
{
blog.Posts.Remove(blog.Posts[0]);  // this one gets deleted - okay, we are in the same db context
}
db.SaveChanges();
}
}
Но в автономном сценарии это не работает.
Здесь я читаю данные, используя один контекст БД, меняю значения и пытаюсь сохранить измененные значения во второй БД контекст.
В реальном проекте данные считываются с помощью веб-интерфейса, а затем измененные данные передаются через JSON, поэтому нет возможности сохранить контекст БД открытым.< /p>

Код: Выделить всё

Blog? existingBlog = new();

using (var db = new BloggingContext())
{
existingBlog = db.Blogs.Include(blog => blog.Posts).FirstOrDefault(b => b.BlogId == blogId);
}

// change values, add Posts and delete Posts
Blog updatedBlog = ChangeValuesOfBlogAndPosts(existingBlog!);

using (var db = new BloggingContext()) // here we are in a new db context
{
db.Blogs.Update(updatedBlog);
db.SaveChanges();
}
Теперь все изменения, сделанные в 1-стороне (здесь: Блоги), сохраняются, все изменения в n-стороне (= Сообщения) сохраняются, все новые публикации в блоге сохраняются. , но удаленные сообщения все еще находятся в БД, поэтому при следующем чтении у нас все еще есть все удаленные данные.
Я прочитал много сообщений, попробовал несколько синтаксических вариантов, нашел подсказку «Отдельный картограф», но я думаю, что это довольно простая функция, и она работает, когда я нахожусь только в одном контексте БД, поэтому боюсь, что мне просто не хватает одной мелочи, чтобы запустить ее без инструментов.Если это имеет какое-либо значение, база данных — Oracle 19.
Так что спасибо за любую помощь.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ot-deleted
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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