Вы должны следовать совету @ Slauma из комментария и изменить код, потому что это неправильное поведение для постоянных свойств. Даже если работает следующее описание, оно будет очень подвержено ошибкам, потому что вам всегда придется запрашивать данные особым образом.
Ваша проблема может быть разделена на несколько частей в зависимости от способа загрузки объектов.
Ленивая загрузка:
Если вы загрузите Parent and
Child` загружен лениво, вы не сможете добиться обратной загрузки.
// Now parent is loaded
var parent = context.Parent.First();
// Even with lazy loading enabled and your setter accessing nav. property it
// should not load child collection because lazy loading should be temporarily
// turned off during entity materialization to avoid unexpected lazy loads
(не проверено). Вы можете сначала попробовать вручную загрузить все дочерние элементы и затем запросить родительские:
// Now all child for given parent are loaded
var child = context.Child.Where(c => c.Parent.Id == ...).ToList();
// Now parent is loaded and if you are lucky it configures navigation property
// to loaded child prior to evaluating your setter - I guess setter will be
// evaluated prior to fixing navigation properties so it will not work
var parent = child[0].Parent;
При явной загрузке 1017 * возникнет та же проблема.
Стремительная загрузка:
Проблема та же, и она основана на способе , как работает Include .
Таким образом, если вы включите дочерний элемент в родительский, родитель будет материализован первым.
var parent = context.Parent.Include("Child").First();
Обратная операция в этом случае, скорее всего, не поможет, потому что вызов
var childs = context.Child.Include("Parent").Where(...).ToList();
будет оценивать записи одну за другой, и каждая запись будет содержать одного ребенка и родителя, поэтому я думаю, что при первом обращении к родителю у вас будет только один ребенок, и опять вы будете зависеть от порядка операций, выполняемых EF (то же самое проблема как с ленивой загрузкой).