[英]EF Core on Npgsql AddRange indices
我必须复制Recodrs的集合并将其添加到具有新ID的数据库中。
var subEntities= ct.SubEntities.Where(qf => qf.ParentEntityId == oldParentEntityId).ToList();
subEntities.ForEach(qf => { qf.ParentEntityId = newParentEntityId; qf.Id = default(int); });
ct.SubEntities.AddRange(subEntities);
当AddRange
运行时,所有实体subEntities
都具有笨拙的ID,如-2147482647,尽管有正确的顺序,它们也会进入db。 如何解决?
我的实体类和映射:
public class SubEntity
{
public int Id { get; set; }
public Guid ParentEntityId { get; set; }
public virtual ParentEntity ParentEntity { get; set; }
//props
}
public class ParentEntity
{
public Guid Id { get; set; }
public virtual List<SubEntity> SubEntities { get; set; }
//props
}
//OnModelCreating
builder.Entity<ParentEntity>()
.HasMany(q => q.SubEntities)
.WithOne(qf => qf.ParentEntity)
.HasForeignKey(qf => qf.ParentEntityId)
.OnDelete(Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.Cascade);
问题是提取ParentEntity
的方式。 它由EF跟踪(我想也是SubEntities
),所以我尝试添加一个已经被跟踪的集合。 我不太了解EF在这种情况下如何工作,但解决方案是:
var subEntities= ct.SubEntities
.Where(qf => qf.ParentEntityId == oldParentEntityId)
.AsNoTracking()
.ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.