如何解决带有 Angular代码优先的 ASP.NET Core 项目 - 使用复合键更新子项
我有以下型号:
public class Parent {
public int Id {get; set;}
public string Name {get; set;}
public ICollection<Child> Childs {get; set;}
...
public Parent()
{
Childs = new Collection<Child>();
}
}
public class Child {
public string KeyB {get; set;}
public int KeyA {get; set;}
public Parent Parent {get; set;}
public int ParentId
...
}
我使用 Fluent API 来定义 Child 的密钥:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Child>()
.HasKey(b => new {b.ParentId,b.KeyA,b.KeyB});
}
用于创建操作的父级控制器如下所示(子级结构相同):
[HttpPost]
public async Task<IActionResult> CreateParent([FromBody] SaveParentResource parentResource){
var parent = mapper.Map<SaveParentResource,Parent>(parentResource);
repository.Add(parent );
await unitOfWork.CompleteAsync();
parent = await repository.GetParent(parent.Id);
var result = mapper.Map<Parent,ParentResource>(parent);
return Ok(result);
}
创建操作的父级存储库如下所示(子级结构相同):
public void Add(Parent parent)
{
context.Parent.Add(parent);
}
ngOnInit(): void {
if(this.parent.id)
this.loadData()
}
private loadData(){
this.childList = [];
this.parentService.getParent(this.parent.id)
.subscribe((parent: Parent) => {
this.parent = parent;
this.values.forEach(value => {
this.childList.push({
// Generates a list with filtered data from parent.Childs based on value
});
});
});
}
saveParent(){
var updatedParent: SaveParent = {
id: this.parent.id,name: this.parent.name
}
if(updatedParent.id == 0) {
this.parentService.create(updatedParent)
.subscribe((parent: Parent) => {
this.parent = parent;
this.loadData();
});
} else {
this.parentService.update(updatedParent)
.subscribe((parent: Parent) => {
this.loadData();
});
}
}
saveChild(child: Child){
var updatedChild: Child = {
keyB: child.keyB,keyA: child.keyA,parentId: this.parent.id
...
}
var prevIoUsChild = this.parent.childs.find(c => c.keyB == updatedChild.keyB)
if(prevIoUsChild === undefined) {
this.childService.create(updatedChild).subscribe();
} else {
this.childService.update(updatedChild).subscribe();
}
}
INSERT 语句与 FOREIGN KEY 约束“FK_Childs_Parents_ParentId”冲突。 冲突发生在数据库“TestDb”、表“dbo.Parents”、“Id”列中。 声明已终止。
使用 Postman 测试 WebAPI 似乎适用于子 CRUD 操作,但是当我尝试从 angular 组件内部调用它时,它失败了。我的问题在哪里?我做错了什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。