У меня возникла проблема, когда я пытаюсь сохранить новый объект с существующими объектами вложенными. Вместо того, чтобы создавать отношения с существующими сущностями, они дублируют их.Вложенная существующая сущность дублируется при сохранении родителя
Это примерно моя модель:
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 == 0
.
Как остановить существующий AddressLineTypes
дублирование при сохранении?
Спасибо, я буду видеть, если я могу получить, чтобы работать. Моя логика немного странна, поскольку данные поступают через слушателя, поэтому я делаю запрос, а затем цикл while проверяет индекс словаря для токена запроса и захватывает объект из значения. Мне пришлось бы вытащить много логики из моего слушателя, чтобы заставить это работать. Думаю, мне нужно реорганизовать весь код, я надеялся на быстрый способ сделать вложенные сущности правильно сохраненными, если их отсоединить от контекста :( – Guerrilla