.net 先保存子项,后保存父项,不重复c#

tzdcorbm  于 2022-12-30  发布在  .NET
关注(0)|答案(3)|浏览(150)

假设我们有班级家长

public class Parent {
int Id {get;set;}
Child child {get;set;}
}

和班孩子

public class Child {
    int Id {get;set;}
    string Info {get;set;}
    }

我创建了一个child对象并将其保存为db

Child child = new Child();
  dbContext.Child.Add(child);
                    dbContext.SaveChanges();

然后创建一个父对象,并将创建的子对象分配给父对象(以便以后使用)

Parent parent = new Parent();
      parent.child=child;
       dbContext.Parent.Add(parent);
         dbContext.SaveChanges();

问题:在数据库中保存父对象后,我在数据库中的子类中得到了一个重复的子对象。注意,我使用的是sql Server作为数据库。

我想将子对象分配给父对象,当我在数据库中保存父对象时,父对象不会再次保存子对象,请提供任何解决方案?

jgzswidk

jgzswidk1#

试试这个

Parent parent = new Parent();
var existingChild = dbContext.Child.Find(child.id);
if (existingChild != null){
    parent.child = existingChild;
}
dbContext.Parent.Add(parent);
dbContext.SaveChanges();
z9smfwbn

z9smfwbn2#

如果dbContext已经存在,为了避免再次插入,可以在将子对象附加到上下文之后将dbContext设置为Unchanged
在保存子对象之后添加以下代码。

dbContext.Entry(child).State = EntityState.Unchanged;
kcugc4gi

kcugc4gi3#

我找到的唯一解决方案是只调用一次dbcontext的保存方法(我只在保存父对象时调用它),否则它将在数据库中保存两次。

相关问题