/// <summary> /// Part 2 of initialization - must be run after all wrapped EntitySets are initialized. /// </summary> public void WrapNavigationTargets(EdmEntityContainerWrapper container, Dictionary <string, EdmEntityTypeWrapper> fixedTypes) { var navigationMappings = new List <IEdmNavigationTargetMapping>(); foreach (var innerNavigationMapping in _innerEntitySet.NavigationTargets) { var innerDeclaringType = innerNavigationMapping.NavigationProperty.DeclaringType as IEdmEntityType; EdmEntityTypeWrapper declaringType; if ((innerDeclaringType != null) && (fixedTypes.TryGetValue(innerDeclaringType.FullName(), out declaringType))) { var propName = innerNavigationMapping.NavigationProperty.Name; var navigationProperty = declaringType.DeclaredNavigationProperties().Single(navProp => navProp.Name == propName); var innerTargetEntitySet = innerNavigationMapping.TargetEntitySet; var targetEntitySet = container.FindEntitySet(innerTargetEntitySet.Name); navigationMappings.Add(new EdmNavigationTargetMapping(navigationProperty, targetEntitySet)); } else { throw new InvalidOperationException("IEdmNavigationTargetMapping could not be initialized for " + innerNavigationMapping.NavigationProperty.Name + " - perhaps we don't have correct support for complex types?"); } } _navigationTargetMappings = navigationMappings.ToArray(); }
public EdmEntitySetWrapper(IEdmEntitySet innerEntitySet, EdmEntityContainerWrapper container, EdmEntityTypeWrapper elementType) { Contract.Requires <ArgumentNullException>(innerEntitySet != null); Contract.Requires <ArgumentNullException>(container != null); Contract.Requires <ArgumentNullException>(elementType != null); _innerEntitySet = innerEntitySet; _container = container; _elementType = elementType; }
private void FixUpEntityContainers() { foreach (var efEntityContainer in _dbContextEdmModel.SchemaElements.OfType <IEdmEntityContainer>()) { EdmEntityContainerWrapper containerWrapper = new EdmEntityContainerWrapper(efEntityContainer, _fixedTypes); _fixedContainers.Add(containerWrapper.Name, containerWrapper); } // Fixup the NavigationMappings foreach (var containerWrapper in _fixedContainers.Values) { foreach (var entitySetWrapper in containerWrapper.EntitySetWrappers) { entitySetWrapper.WrapNavigationTargets(containerWrapper, _fixedTypes); } } }
private bool TryGetEntityContainerWrapperForFixedEntityContainer(IEdmEntityContainer fixedEntityContainer, out EdmEntityContainerWrapper entityContainerWrapper) { if (fixedEntityContainer != null) { return(_fixedContainers.TryGetValue(fixedEntityContainer.Name, out entityContainerWrapper)); } entityContainerWrapper = null; return(false); }