Создание и последующее обновление в той же функции вызывает исключение «то же значение ключа для {id} уже отслеживается» - PullRequest
1 голос
/ 01 июля 2019

Используя .NET Core 2.1, Entity Framework Core и NPGSQL.

Я создаю новую запись:

await _context.music.AddAsync(song);
await _context.SaveChangesAsync();

Затем, внутри функции , аналогичной , ясделайте несколько вычислений (что я не могу сделать во время создания) и затем вызовите Update (обновив только поле «Комментарии»):

_context.music.Update(song);
await _context.SaveChangesAsync();

Вот класс «Song»:

public class Song
{
    [Key]
    public int SongId { get; set; }
    public int Title{ get; set; }
    public string Comments{ get; set; }

    //Navigation Properties
    public virtual ICollection<Foo> Foos { get; set; }        
}

В моем MusicContext:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.ForNpgsqlUseIdentityColumns();

    modelBuilder.Entity<Foo>()
        .HasOne(m => m.Song)
        .WithMany(r => r.Foos)
        .HasForeignKey(m => m.SongId);
}

Это исключение, которое я получаю:

System.AggregateException: произошла одна или несколько ошибок.(Произошла одна или несколько ошибок. (Экземпляр типа сущности 'Song' не может быть отслежен, поскольку другой экземпляр с тем же значением ключа для {'SongId'} уже отслеживается. При присоединении существующих сущностей убедитесь, что только один экземпляр сущности сзаданное значение ключа присоединено. Чтобы увидеть конфликтующие значения ключа, используйте «DbContextOptionsBuilder.EnableSensitiveDataLogging».)) ---> System.AggregateException: произошла одна или несколько ошибок.

У всех есть идеи?: - /

1 Ответ

0 голосов
/ 02 июля 2019

Я бы пересмотрел ваш подход.Если вы используете тот же метод для добавления, а затем для обновления, я просто добавлю внизу, включая значение комментария из ваших расчетов.

...