试图更新或删除商店中不存在的实体
Attempted to update or delete an entity that does not exist in the store
我遇到了 EF Core 3.x 和一对多导航属性的问题,我在以前的版本中没有。
考虑以下代码:
public class Book
{
public Book()
{
this.Id = Guid.NewGuid();
this.Authors = new List<Author>();
}
public virtual Guid Id { get; protected set; }
public virtual ICollection<Author> Authors { get; set; }
public void AddAuthor(Author author)
{
author.BookId = this.Id;
this.Authors.Add(author);
}
}
public class Author
{
public Author()
{
this.Id = Guid.NewGuid();
}
public virtual Guid Id { get; protected set; }
public virtual Guid BookId { get; set; }
public virtual Book Book { get; set; }
}
在以前的 EF 版本(如 2.2)中,可以执行以下操作:
var book = new Book();
context.Books.Add(book);
context.SaveChanges();
book = context.Books.First();
var author = new Author();
book.Authors.Add(author);
context.SaveChanges();
现在,同样的代码,在更新到 EF Core 3.x 后,在最后一次调用 SaveChanges() 时抛出以下异常,我真的不明白为什么:
'Attempted to update or delete an entity that does not exist in the store.'
如果我检查 DbContext 的 ChangeTracker,我确实看到 Author 实体被标记为已修改而不是已添加。
然而,以下内容工作正常:
var book = new Book();
context.Books.Add(book);
context.SaveChanges();
book = context.Books.First();
var author = new Author() { BookId = book.Id };
context.Authors.Add(author);
context.SaveChanges();
这是怎么回事?我阅读了 3.x 中可能的重大更改,但没有找到此问题的 mention/solution。有人有想法吗?
提前致谢!
所以,在 google 上爬行进一步让我着陆在这个 post 上:
Owned Entity marked as detached when adding to a collection when the entities primary key is set
这似乎是一个错误,我可以通过使用以下实体配置来解决,正如上面 post 中建议的 ajcvickers:
modelBuilder.Entity<Author>().Property(e => e.Id).ValueGeneratedNever();
我遇到了 EF Core 3.x 和一对多导航属性的问题,我在以前的版本中没有。
考虑以下代码:
public class Book
{
public Book()
{
this.Id = Guid.NewGuid();
this.Authors = new List<Author>();
}
public virtual Guid Id { get; protected set; }
public virtual ICollection<Author> Authors { get; set; }
public void AddAuthor(Author author)
{
author.BookId = this.Id;
this.Authors.Add(author);
}
}
public class Author
{
public Author()
{
this.Id = Guid.NewGuid();
}
public virtual Guid Id { get; protected set; }
public virtual Guid BookId { get; set; }
public virtual Book Book { get; set; }
}
在以前的 EF 版本(如 2.2)中,可以执行以下操作:
var book = new Book();
context.Books.Add(book);
context.SaveChanges();
book = context.Books.First();
var author = new Author();
book.Authors.Add(author);
context.SaveChanges();
现在,同样的代码,在更新到 EF Core 3.x 后,在最后一次调用 SaveChanges() 时抛出以下异常,我真的不明白为什么:
'Attempted to update or delete an entity that does not exist in the store.'
如果我检查 DbContext 的 ChangeTracker,我确实看到 Author 实体被标记为已修改而不是已添加。
然而,以下内容工作正常:
var book = new Book();
context.Books.Add(book);
context.SaveChanges();
book = context.Books.First();
var author = new Author() { BookId = book.Id };
context.Authors.Add(author);
context.SaveChanges();
这是怎么回事?我阅读了 3.x 中可能的重大更改,但没有找到此问题的 mention/solution。有人有想法吗?
提前致谢!
所以,在 google 上爬行进一步让我着陆在这个 post 上: Owned Entity marked as detached when adding to a collection when the entities primary key is set
这似乎是一个错误,我可以通过使用以下实体配置来解决,正如上面 post 中建议的 ajcvickers:
modelBuilder.Entity<Author>().Property(e => e.Id).ValueGeneratedNever();