2016-11-28 9 views
0

Мне нужно скопировать коллекцию recodrs и добавить их в db с новыми идентификаторами.EF Core на Npgsql Индексы AddRange

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 имеет неудобные Идентификаторы как -2147482647 и они идут в дб, хотя есть правильная последовательность. Как это исправить?

Мои объектные классы и отображение:

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

Мне нужно увидеть полный код, чтобы сохранить изменения, можете ли вы отправить сообщение? –

ответ

0

Проблема была образом ParentEntity были извлечены. Он был отслежен EF (так же, как и в случае с SubEntities), поэтому я попытался добавить уже отслеживаемую коллекцию. Я не совсем понимаю, как работает EF в этом случае, но решение было таким:

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

 Смежные вопросы

  • Нет связанных вопросов^_^