在Entity Framework中克隆记录及其所有相关记录

时间:2018-11-21 17:47:12

标签: entity-framework-core

我有一个Person模型,该模型具有1:1: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; }

在检索,保存,查看等方面,这一切都很好而且很花哨。

我现在需要对“个人”记录及其相关的“地址”记录进行快照。

我可以使用

轻松地复制“人”记录
    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中的任何相关记录,还是复制个人记录,然后遍历相关地址记录的集合,添加一次复制的地址的唯一选择? ?

1 个答案:

答案 0 :(得分:0)

.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();