gpt4 book ai didi

c# - 保存父项时嵌套的现有实体重复

转载 作者:太空宇宙 更新时间:2023-11-03 10:23:35 25 4
gpt4 key购买 nike

我在尝试保存嵌套了现有实体的新实体时遇到问题。它不是与现有实体建立关系,而是复制它们。

这大概是我的模型:

public class Record
{
public int ID { get; set; }
public string RecordValue { get; set; }
public virtual ICollection<AddressLine> AddressLines { get; set; }
}
public class AddressLine
{
public int ID { get; set; }
public string AddressLineValue { get; set; }
public virtual ICollection<AddressLineType> AddressLineTypes { get; set; }
}
public class AddressLineType
{
public int ID { get; set; }
public string AddressLineTypeValue { get; set; }
}

我不想添加任何重复的 AddressLineTypes,所以在我的代码中我正在做这样的事情:

public void button1_Click(object sender, EventArgs e)
{

Record r = new Record();
r.RecordValue = "Record value";

AddressLine al = new AddressLine();
al.AddressLineValue = "Address line value";

AddressLineType alt;
using (var db = new MyDbContext())
{
alt = db.AddressLineTypes.Single(x => x.Value == "TypeValue");
}

al.AddressLineTypes.Add(alt);
r.AddressLines.Add(al);

SaveRecord(r);
}

public void SaveRecord(Record r)
{
using (var db = new MyDbContext())
{
db.Records.Add(r);
db.SaveChanges();
}
}

我在 db.SaveChanges()AddressLineType ID 之前遇到了断点,但它在数据库中创建了新条目,就好像 ID == 0

如何在保存时停止复制现有的 AddressLineTypes

最佳答案

尝试使用单个上下文:

...    
using (var db = new MyDbContext())
{
alt = db.AddressLineTypes.Single(x => x.Value == "TypeValue");


al.AddressLineTypes.Add(alt);
r.AddressLines.Add(al);

SaveRecord(r, db);
}
}

public void SaveRecord(Record r, MyDbContext db)
{
db.Records.Add(r);
db.SaveChanges();
}

关于c# - 保存父项时嵌套的现有实体重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32448947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com