试图更新或删除商店中不存在的实体

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();