C# 在实体框架核心中保存一对多关系

C# 在实体框架核心中保存一对多关系,c#,.net,asp.net-mvc,entity-framework-core,C#,.net,Asp.net Mvc,Entity Framework Core,我正在尝试使用ef core插入一对多的主数据和详细信息列表, 但是在foreach内部的这一行中抛出了一个异常 无法跟踪实体类型的实例,因为跟踪了具有相同键值的另一个实例 我怎么做呢 谢谢如果您添加主节点,entity framework将自动添加其子节点 public Master Add(Master request) { request.CreatedDate = DateTime.Now; // master Context.Entry(request).Sta

我正在尝试使用ef core插入一对多的主数据和详细信息列表, 但是在foreach内部的这一行中抛出了一个异常

无法跟踪实体类型的实例,因为跟踪了具有相同键值的另一个实例

我怎么做呢


谢谢

如果您添加主节点,entity framework将自动添加其子节点

public Master Add(Master request)
{
    request.CreatedDate = DateTime.Now;
    // master
    Context.Entry(request).State = EntityState.Added;
    // details
    if (request.Details != null && request.Details?.Count != 0)
    {
        request.Details.ForEach(x => Context.Entry(x).State = EntityState.Added);    
    }
    Context.SaveChanges();
    return request;
}  

问题出在Details表中,它只有一个主键表的外键,没有任何主键(id)。。所以我得到了一个例外

public Master Add(Master request)
{
    request.CreatedDate = DateTime.Now;
    // master
    Context.Entry(request).State = EntityState.Added;
    Context.SaveChanges();
    return request;
}  

在添加主键后,它可以正常工作。

如果详细信息列表有一项,则会保存数据。。。如果有多个项,则引发异常:无法跟踪实体类型“Details”的实例,因为已在跟踪另一个具有{Id}相同键值的实例。附加现有实体时,请确保仅附加一个具有给定键值的实体实例。我建议您分别向数据库添加
Master
Details
。我是ef core的新手,我该如何做?--掌握和细节之间有关系(一对多),你应该改变你的策略。首先,将
master
实体添加到数据库中。然后创建一个新的视图或页面并逐个添加
详细信息
!您应该定义新的方法,比如
publicvoidadddetail(Details entity){}
i做了,但是只添加了主控,没有任何细节。。。主模型具有属性列表,而详细信息模型具有主属性。。。这里是我的配置:builder.HasMany(x=>x.Details).WithOne(x=>x.Master).HasForeignKey(x=>x.Id).OnDelete(DeleteBehavior.Restrict);您是否检查了迁移文件中的实体框架是否识别了此一对多关系?您是否尝试通过编写context.masters.add(master)来添加master;添加主控形状仅添加主控形状行,没有任何详细信息
The instance of entity type 'Details' cannot be tracked because another instance with the same key value for {'Id'} is already being tracked.