Когда вы делаете вывод, похоже, что Контекст извлекает Комментарий как Сообщение (не зная, что это комментарий). Позже вы запрашиваете фактический комментарий, поэтому контекст извлекает комментарий. Теперь у вас есть два экземпляра объекта в контексте с одним и тем же идентификатором - один является сообщением, а другой - комментарием.
Кажется, что исключение не генерируется до тех пор, пока оба объекта не будут загружены (т.е. когда вы пытаетесь получить доступ к Сообщению во второй раз). Если вы можете найти способ удалить Сообщение из контекста при загрузке комментария, это может решить вашу проблему.
Другим вариантом может быть использование модели «Таблица на иерархию». Это приводит к плохому дизайну базы данных, но в конце концов вы должны использовать то, что работает.
Возможно, вам удастся избежать этой проблемы, предварительно загрузив объекты в качестве комментариев. Таким образом, когда вы запрашиваете Сообщение, Контекст уже знает о нем.
Также рассмотрите возможность использования Композиция над наследованием , чтобы в сообщении было 0..1 CommentDetails.
Последнее предложение - удалить зависимость от Entity Framework из вашего кода управления и создать уровень доступа к данным, который ссылается на EF и извлекает ваши объекты. DAL может превратить объекты Entity Framework в другой набор объектов Entity, которые легче использовать в коде. Этот подход приведет к большим накладным расходам кода, но может быть целесообразным, если вы не можете использовать Entity Framework для создания модели Entity, которая представляет ваши сущности так, как вы хотите с ними работать.
Подводя итог, если MS не решит эту проблему, не существует решения вашей проблемы, которое не предполагает переосмысления вашего подхода. К сожалению, Entity Framework не идеален, особенно для сложных моделей Entity - вам может быть лучше создать свой собственный DAL и вообще обойти EF.