Это происходит из-за кэширования Entity Framework.
Получаемое сообщение
Просмотр профиля пользователя из целевой таблицы INSERT не вставляется в
Вы получаете это, потому что, как вы сказали,
Объект UserProfile представляет представление и не может быть вставлен (поскольку имеет левое соединение).
Кажется, это пока что имеет смысл ...
После удаления строки
_context.Entry(branch.Organisation.UserProfile).State = EntityState.Unchanged;
Вы помечаете кэшированную запись как неизменную. Это означает, что при сохранении SaveChanges () Entity Framework НЕ будет пытаться произвести sh обновление этой записи в базе данных. Я не могу ответить, КАК UserProfile "трогается", но у вас есть атрибут
[ForeignKey("UserId")]
в организации. У меня есть ощущение, что, поскольку вы изменяете объект Organization, Entity Framework пытается «коснуться» всех дочерних объектов. Кажется, это как-то генерирует «Вставку» в профиле пользователя. Ваше исправление состоит в том, чтобы установить для объекта значение «Без изменений», чтобы структура сущностей никогда не пыталась внести sh какие-либо изменения в эту таблицу.
Редактировать: возможно, я смогу объяснить это поведение, если 1) вы создадите новую ветвь , 2) Свяжите организацию с филиалом, которого нет в кэше EF. 3) Связанная организация имеет профиль пользователя, которого нет в кэше EF. Я думаю, что если вы сгенерировали ветку в этой ситуации, EF автоматически попытается сериализовать ваши связанные объекты и вставить их в базу данных.
Вы можете сломать этот шаблон, если вы изменили свои классы, подобные
[Table("branch")]
public class Branch
{
public long BranchId { get; set; }
public string BranchName { get; set; }
public long OrganisationId { get; set; }
}
public class BranchComposite
{
public Branch Branch { get; set; }
[ForeignKey("OrganisationId")]
public Organisation Organisation { get; set; }
}