Попытка обновить или удалить объект, которого нет в магазине.C#

Место общения программистов C#
Ответить
Anonymous
 Попытка обновить или удалить объект, которого нет в магазине.

Сообщение Anonymous »

У меня возникла проблема с EF Core 3.x и свойствами навигации «Один-ко-многим», которых не было в предыдущих версиях.

Рассмотрите следующий код :

Код: Выделить всё

public class Book
{

public Book()
{
this.Id = Guid.NewGuid();
this.Authors = new List();
}

public virtual Guid Id { get; protected set; }

public virtual ICollection 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(), и я действительно не могу понять почему:

'Попытка обновить или удалить объект, которого нет в магазине.'
Если я проверю ChangeTracker DbContext, Я действительно вижу, что сущность "Автор" помечена как "Изменено", а не "Добавлено".

Однако следующее работает нормально:

Код: Выделить всё

  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, но не нашел упоминания/решения этой проблемы. У кого-нибудь есть идеи?

Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/594 ... -the-store
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»