Отношения 1-к-1, вызывающие исключение: AssociationSet находится в состоянии "Удалено". С учетом ограничений множественности

Я установил связь 1 к 1, используя код EF, сначала следуя методу, описанному здесь:

Однонаправленные отношения "один-к-одному" в платформе Entity Framework

Мое отображение выглядит следующим образом:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Asset>()
        .HasRequired(i => i.NewsItem)
        .WithOptional(e => e.Asset)
        .Map(m => m.MapKey("NewsItemId"));
}

Но когда я получаю это исключение...

Отношения "Asset_NewsItem" AssociationSet находятся в состоянии "Удалено". Учитывая ограничения множественности, соответствующий "Asset_NewsItem_Source" также должен находиться в состоянии "Удалено".

Всякий раз, когда выполняется этот код:

var entry = _db.NewsItems.Find(id);

entry.Asset = new Asset();

_db.DbContext.SaveChanges();

Я могу заставить работу работать, если я явно отмечу предыдущий Asset, связанный с NewsItem, для удаления, но это просто кажется случайным. Похоже, что на основе сопоставления приведенный выше код должен просто работать... заменять старый Asset новым.

Я что-то делаю неправильно? Есть ли что-то, что мне нужно указать в сопоставлении, которое будет работать правильно? Или это просто способ EF, который нужно удалить, а затем добавить связанные объекты, подобные этому?

Ответ 1

Как работает EF. Вы загрузили запись со связанными активами и знаете, что хотите присвоить новый актив. Эта операция приведет к тому, что ваш старый актив не связан с какой-либо записью, но он не разрешен вашим сопоставлением (вы указали, что Asset должен иметь связанный Entry). Таким образом, вы должны удалить старый актив или назначить его другой записи, прежде чем назначать новый актив для удовлетворения ваших ограничений сопоставления.