EF Core Удаление связанных сущностей в отношении один-к-одному - PullRequest
0 голосов
/ 19 июня 2019

У меня установлены отношения один на один на ef core.Когда я пытаюсь удалить Article сущность, мне нужно каскадировать MediPlan, так как это one to one отношение.Когда я удаляю Article, MediaPlan не удаляется.

Здесь настроено.

public class Article
{
    public int Id { get; set; }

    public int MediaPlanId { get; set; }

    public MediaPlan MediaPlan { get; set; }
}

и

public class MediaPlan
{
    public int Id { get; set; }
    public Article Article { get; set; }
}

Context

modelBuilder.Entity<Article>().HasOne(x => x.MediaPlan).WithOne(x => x.Article);

Код для удаления

var article = await _db.Articles
            .Include(x=>x.MediaPlan)
            .SingleAsync(x=>x.Id == id);
_db.Articles.Remove(article);
await _db.SaveChangesAsync();

Должен ли я также установить FK для MediaPlan сущности?

Спасибо!

1 Ответ

0 голосов
/ 19 июня 2019

Я вижу, что ваша One-to-One Fluent API конфигурация написана неправильно, поскольку вы не указали зависимую сущность.Ваша Fluent API конфигурация должна быть записана следующим образом:

modelBuilder.Entity<Article>().HasOne(a => a.MediaPlan)
                              .WithOne(mp => mp.Article)
                              .HasForeignKey<Article>(a => a.MediaPlanId)
                              .OnDelete(DeleteBehavior.Cascade);

Теперь удаление MediaPlan также приведет к удалению зависимого Article следующим образом:

var mediaPlanToBeDeleted = await _db.MediaPlans.FirstOrDefaultAsync(x=>x.Id == id);
_db.MediaPlans.Remove(mediaPlanToBeDeleted);
await _db.SaveChangesAsync();

Теперь, если вам нужно обратное поведение, вы должны полностью изменить конфигурацию Fluent API .

Примечание. Только удаление основного объекта приведет к каскадному удалению зависимого объекта.И наоборот невозможно.

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