C# 在同一函数中创建然后更新会导致异常;正在跟踪{id}的相同键值";

C# 在同一函数中创建然后更新会导致异常;正在跟踪{id}的相同键值";,c#,.net-core,entity-framework-core,npgsql,C#,.net Core,Entity Framework Core,Npgsql,使用.NETCore2.1、实体框架核心和NPGSQL 我创建了一个新记录: await _context.music.AddAsync(song); await _context.SaveChangesAsync(); 然后,在相同的函数中,我进行一些计算(在创建时我无法进行计算),然后调用Update(仅更新了Comments字段): 这是“歌”课: 公共类歌曲 { [关键] public int SongId{get;set;} 公共整数标题{get;set;} 公共字符串注释{get;

使用.NETCore2.1、实体框架核心和NPGSQL

我创建了一个新记录:

await _context.music.AddAsync(song);
await _context.SaveChangesAsync();
然后,在相同的函数中,我进行一些计算(在创建时我无法进行计算),然后调用Update(仅更新了Comments字段):

这是“歌”课:

公共类歌曲
{
[关键]
public int SongId{get;set;}
公共整数标题{get;set;}
公共字符串注释{get;set;}
//导航属性
公共虚拟ICollection Foos{get;set;}
}
在我的音乐背景中:

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

    modelBuilder.Entity<Foo>()
        .HasOne(m => m.Song)
        .WithMany(r => r.Foos)
        .HasForeignKey(m => m.SongId);
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.ForNpgsqlUseIdentityColumns();
modelBuilder.Entity()
.HasOne(m=>m.Song)
.WithMany(r=>r.Foos)
.HasForeignKey(m=>m.SongId);
}
这是我得到的例外:

System.AggregateException:发生一个或多个错误。(一个或多个 出现错误。(无法创建实体类型“Song”的实例。) 由于具有相同键值的另一个实例被跟踪 {'SongId'}已被跟踪。附加现有 实体,确保只有一个实体实例具有给定的键值 附上。考虑使用 “DbContextOptions Builder.EnableSensivedAtalogging”以查看 冲突的键值。)-->System.AggregateException:一个或多个 出现了错误


有人有什么想法吗?:-/

我会重新考虑你的方法。如果您使用相同的方法进行添加,然后进行更新,我将只在底部进行添加,包括您计算的注释值。

我将重新考虑您的方法。如果您使用相同的方法进行添加然后更新,我只会在底部进行添加,包括计算中的注释值。

考虑使用“DBContextOptions Builder.EnableSensiveDatalogging”查看冲突的键值。然后发布错误生成异常的是哪一行?调用
Update
?顺便说一句,这一行是多余的,因为在
Add[Async]
之后,
song
已经被上下文跟踪,所以您只需要它来修改一些属性,然后调用
SaveChanges[Async]
。不管怎样,关键可能是您在显示的两个代码段之间到底在做什么。我想是必要的。考虑使用“dBraveTopStudioBuff.EnabelSythViDeAtCug”来查看冲突的键值。然后发布错误生成异常的是哪一行?调用
Update
?顺便说一句,这一行是多余的,因为在
Add[Async]
之后,
song
已经被上下文跟踪,所以您只需要它来修改一些属性,然后调用
SaveChanges[Async]
。不管怎样,关键可能是您在显示的两个代码段之间到底在做什么。我想这是必要的。
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; }        
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.ForNpgsqlUseIdentityColumns();

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