private void DoFixup(IEnumerable<INavigation> navigations, InternalEntityEntry principalEntry, InternalEntityEntry[] dependentEntries) { foreach (var navigation in navigations) { if (navigation.PointsToPrincipal()) { var setter = _setterSource.GetAccessor(navigation); foreach (var dependent in dependentEntries) { setter.SetClrValue(dependent.Entity, principalEntry.Entity); dependent.RelationshipsSnapshot.TakeSnapshot(navigation); } } else { if (navigation.IsCollection()) { var collectionAccessor = _collectionAccessorSource.GetAccessor(navigation); foreach (var dependent in dependentEntries) { if (!collectionAccessor.Contains(principalEntry.Entity, dependent.Entity)) { collectionAccessor.Add(principalEntry.Entity, dependent.Entity); } } } else { // TODO: Decide how to handle case where multiple values match non-collection nav prop // Issue #739 _setterSource.GetAccessor(navigation).SetClrValue(principalEntry.Entity, dependentEntries.Single().Entity); } principalEntry.RelationshipsSnapshot.TakeSnapshot(navigation); } } }