Как удалить на каскадном ядре EF

Я пытаюсь удалить объекты, связанные друг с другом, когда удаляю строку, но это не удаляет связанные объекты. Это только удаление одного объекта, а не других.

Моя модель

public class Company
{
    public int CompanyId { get; set;}
    public string CompanyName { get; set; }
    public int CompanySize { get; set; }
    public string Branche { get; set;}
    public string Description {get; set;}
    public Recruiter Recruiter { get; set; }
    public ICollection<Post> Posts { get; set; }

}

public class Recruiter
{
    public int RecruiterId { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public string PhoneNumber { get; set; }
    public int CompanyId { get; set; }
    public Company Company { get; set; }
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Location { get; set; }
    public int Compensation { get; set; }
    public string Education { get; set; }
    public string StartDate { get; set; }
    public string Type { get; set; }
    public string Profession { get; set; }
    public string Language { get; set; }
    public string Description { get; set; }
    public string Hours { get; set; }
    public bool Checked { get; set; }
    public int CompanyId { get; set; }
    public Company Company { get; set; }
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Post>()
        .HasOne(post => post.Company)
        .WithMany(company => company.Posts)
        .IsRequired()
        .OnDelete(DeleteBehavior.Cascade);
    
    modelBuilder.SeedDatabase();
}

Звонок, который я делаю. Поэтому, когда я удаляю сообщение, я хочу, чтобы все связанные объекты были удалены.


public Post DeclinePostRequest(int postId)
{
    var request = _dbContext.Posts.Where(post => post.PostId == postId).Include(post => post.Company).ThenInclude(company => company.Recruiter).FirstOrDefault();
    if(!request.Checked)
    {
        _dbContext.Posts.Remove(request);
        _dbContext.SaveChanges();
        return request;
    }
    return null;
}


person Giga Meta    schedule 04.10.2020    source источник
comment
связанные: stackoverflow.com/questions/48692144/   -  person dev-masih    schedule 04.10.2020


Ответы (1)


Вы удаляете многостороннюю связь 1-ко-многим. Все работает как положено.

Вместо этого попробуйте удалить Company.

person Tanveer Badar    schedule 04.10.2020
comment
Хм, да, ты прав. Когда я удаляю компанию, вместо этого она работает. Как я могу убедиться, что когда я удаляю сообщение, остальные удаляются? Всегда ли мне нужно удалять отношение «многие к одному», а не «один ко многим»? - person Giga Meta; 04.10.2020
comment
Почему вы хотите это сделать? Представьте, что кто-то удаляет один пост. В конечном итоге вы удаляете все для компании, с которой был связан этот пост. Это то, что вы хотите? - person Tanveer Badar; 04.10.2020
comment
О, лол, неважно. Был немного в замешательстве. благодарю за разъяснение - person Giga Meta; 04.10.2020