我有一个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中的任何相关记录,还是复制个人记录,然后遍历相关地址记录的集合,添加一次复制的地址的唯一选择? ?
答案 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();