public static void FindAllNavigationProperties(this ODataModelBuilder builder, StructuralTypeConfiguration configuration, IList <Tuple <StructuralTypeConfiguration, IList <object>, NavigationPropertyConfiguration> > navigations, Stack <object> path) { if (builder == null) { throw Error.ArgumentNull("builder"); } if (configuration == null) { throw Error.ArgumentNull("configuration"); } if (navigations == null) { throw Error.ArgumentNull("navigations"); } if (path == null) { throw Error.ArgumentNull("path"); } IEnumerable <StructuralTypeConfiguration> thisAndBaseTypes = configuration.ThisAndBaseTypes(); foreach (var config in thisAndBaseTypes) { builder.FindNavigationProperties(config, navigations, path); } IEnumerable <StructuralTypeConfiguration> derivedTypes = builder.DerivedTypes(configuration); foreach (var config in derivedTypes) { path.Push(config.ClrType); builder.FindNavigationProperties(config, navigations, path); path.Pop(); } }