繁体   English   中英

EF Core on Npgsql AddRange索引

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM