C# 在同一函数中创建然后更新会导致异常;正在跟踪{id}的相同键值";
使用.NETCore2.1、实体框架核心和NPGSQL 我创建了一个新记录: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;
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);
}