Пожалуйста, смотрите мой ответ здесь .
EF Core выдает это исключение, когда вы заменяете экземпляр дочернего объекта новым, как вы делаете здесь:
devblogInDb.Fixs = devblog.Fixs;
devblogInDb.News = devblog.News;
devblogInDb.Removes = devblog.Removes;
devblogInDb.Updates = devblog.Updates;
devblogInDb.PatchName = devblog.PatchName;
К сожалению, единственной работоспособной альтернативой было обновление текущего дочернего объектасвойства напрямую.Согласно моему первоначальному ответу:
// In your DevblogModels and assuming a 1:1 relationship
public void SetNewsReport(NewsReport newsReport)
{
this.News.UpdateFrom(newsReport);
}
// Then, on your NewsReport entity
internal void UpdateFrom(NewsReport other)
{
this.Title = other.Title;
this.Article = other.Article;
// other properties...
}
Второй подход в моем первоначальном ответе предлагает отделить сущность, заменить дочерний экземпляр, затем снова присоединить и попытаться сохранить.В моих попытках с этим подходом исключение исчезло, но данные не сохранились в базе данных.Возможно, вам повезет больше, чем мне ...
context.Entry(devblogInDb).State = EntityState.Detached;
devblogInDb.Fixs = devblog.Fixs;
devblogInDb.News = devblog.News;
devblogInDb.Removes = devblog.Removes;
devblogInDb.Updates = devblog.Updates;
devblogInDb.PatchName = devblog.PatchName;
context.Entry(devblogInDb).State = EntityState.Modified;
Чуть дальше
Поскольку мой первоначальный ответ предполагает, что это давняя проблемас EF Core.Предполагалось, что эта проблема будет исправлена в EF Core 2.1, однако OP моего первоначального ответа использовал кандидат на выпуск для EF Core 2.1.Видимо, из-за этой проблемы либо не было исправления, либо внесенные исправления все еще содержат несколько ошибок (в конце концов, это всего лишь кандидат на релиз ...)
Для отличного прочтения по этой теме, ДжулиЛерман опубликовал статью в журнале MSDN, которую вы можете найти здесь .У нее также есть несколько альтернативных решений, которые вы также можете использовать.