2016-11-28 24 views
0

私はrecodrsのコレクションをコピーし、新しいIDを持つdbに追加する必要があります。NFgsql AddRangeインデックスのEFコア

var subEntities= ct.SubEntities.Where(qf => qf.ParentEntityId == oldParentEntityId).ToList(); 
subEntities.ForEach(qf => { qf.ParentEntityId = newParentEntityId; qf.Id = default(int); }); 
ct.SubEntities.AddRange(subEntities); 

AddRangesubEntitiesが-2147482647のような厄介なのIdsを持っているすべてのエンティティを実行しており、正しい順序があるが、彼らはデシベルに入ります。それを修正するには?

私のエンティティクラスとマッピング:

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); 
+0

Selectメソッドで新しいインスタンスを作成しようとしましたか?私はあなたのエンティティのマッピングについて知っておく必要があります、あなたはそのコードを投稿できますか? –

+0

@ H.Herzlはい、ソースコレクションとAddRangeから新しいインスタンスを選択しようとしましたが、すべて同じです。 – Slip

+0

変更を保存するためにfulllコードを表示する必要がありますか? –

答えて

0

問題がParentEntityが抽出された方法でした。それはEFによって追跡された(あまりにも私が考えたSubEntitiesでした)ので、私はすでに追跡されているコレクションを追加しようとしました。私はこの場合EFの仕組みを理解していませんが、解決策は次のとおりです。

var subEntities= ct.SubEntities 
    .Where(qf => qf.ParentEntityId == oldParentEntityId) 
    .AsNoTracking() 
    .ToList();