在父对象中删除时从子对象中删除实体子对象的选项

Options to Delete Entity child from children when deleted in parent object

我有以下类

{
    public int Id { get; set; }
    public string Name { get; set; }
    public IEnumerable<Child> Children { get; set; }
}

public class Child
{
    public int Id { get; set; }
    publict int ParentId {get; set;}
    public string ChildName { get; set; }
}

在 blazor 前端中,父对象被更改,一些子对象被删除。 首先获取父项包括子项:

然后在编辑表单中删除和更新子项

提交表单并将父对象发送到数据库进行存储:

之后:

ctx.update(parent);
ctx.savechanges();

子项已更新,但删除的子项仍在数据库中。
是删除已删除子项的唯一选项, 从 parentId == ParentId 的数据库中获取现有子项并将它们与更新后的子项进行比较?

首先尝试使用

ICollection<Child> Children 

而不是使用

IEnumerable<Child> Children

然后尝试从父对象中移除子对象(调试验证),然后调用ctx.Update(父)方法(我假设这没有被跟踪)

示例:

@page "/"
@inject ParentChildContext context
<h1>Hello, world!</h1>

Welcome to your new app.

<SurveyPrompt Title="How is Blazor working for you?" />
<button @onclick="@(() => DeleteChild())">Click me</button>
@code {
    Parent parent;

    protected async override Task OnAfterRenderAsync(bool firstRender)
    {
        if(firstRender)
        {
            parent = new Parent()
            {
                Id = 1,
                Name = "Parent 1",
                Children = new List<Child>() {
                new Child() { Id = 1, Name = "ChildName" },
                new Child() { Id = 2, Name = "ChildName2" }
            }

            };
            context.Parents.Add(parent);

            await context.SaveChangesAsync();
        }

    }

    private async void DeleteChild()
    {
        parent.Children.Remove(parent.Children.ToList().FirstOrDefault(x => x.Id == 1));        
        context.SaveChanges();
    }
}