Клонировать запись и все связанные с ней записи в Entity Framework CORE - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть модель Person, которая имеет отношение 1: Множество к адресу, т.е. одна запись Person может иметь много связанных записей Address.

PersonModel (усечено)

public class PersonModel : RootModel {
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int PersonID { get; set; }

AddressModel (усечено)

public class ContactAddressModel : RootModel {
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int AddressID { get; set; }

    [ForeignKey("PersonID")]
    public int PersonID { get; set; }
    public virtual PersonModel objHuman { get; set; }

Все это прекрасно работает для извлечения, сохранения, просмотра и т. Д.

Теперь мне нужно сделать снимок записи Person и связанной с ней записи Address(s).

Я могу достаточно легко продублировать запись о личности, используя

    PersonModel objRecordPerson = await _context.Persons
        .Include(p => p.AddressIDs)
       . AsNoTracking()
        .SingleOrDefaultAsync(m => m.PersonID == PersonID);

    PersonModel objSnapshot = objRecordPerson;
    objSnapshot.PersonID = 0;
    _context.Persons.Add(objSnapshot);
    await _context.SaveChangesAsync();

Есть ли удобный способ дублировать любые связанные записи в EF CORE или это единственный вариант дублированиязапись Person, затем итерация по коллекции связанных записей Address, добавление адреса, дублирующего по одному за раз?

1 Ответ

0 голосов
/ 23 ноября 2018

После .Add записи снимка, итерации по AddressIDs и установке первичного ключа (в данном случае AddressID) на 0 создается новая запись Address, которая берет новый PersonID из снимказапись.

 PersonModel objSnapshot = objRecordPerson;
 objSnapshot.PersonID = 0;
 _context.Persons.Add(objSnapshot);
 foreach (var item in objSnapshot.AddressIDs) {
     item.AddressID = 0;
 }
 await _context.SaveChangesAsync();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...