我有以下类
{
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前端中,父对象被更改,一些子对象被删除。首先获取父元素包括子元素:
- Parent.where (id = = id)其中包括(孩子);(种)
then delete &在编辑表单
中更新子元素- Parent.Children.remove (id = = id)
提交表单并发送父对象到db存储:
:后
ctx.update(parent);
ctx.savechanges();
子节点已更新,但已删除的子节点仍在DB中。
是删除已删除的子元素的唯一选项,从DB中获得现有的子数据库,其中parentId == parentId并将它们与更新的子数据库进行比较?
首先尝试使用
ICollection<Child> Children
而不是
IEnumerable<Child> Children
然后尝试从父对象中删除子对象(调试以验证),然后调用ctx.Update(parent)方法(我假设这没有被跟踪)
的例子:
@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();
}
}