コード例 #1
0
        public static void FindAllNavigationProperties(this ODataModelBuilder builder,
                                                       StructuralTypeConfiguration configuration,
                                                       IList <Tuple <StructuralTypeConfiguration, IList <MemberInfo>, NavigationPropertyConfiguration> > navigations,
                                                       Stack <MemberInfo> 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)
            {
                if (path.OfType <Type>().Any(p => p == config.ClrType))
                {
                    continue;
                }

                path.Push(TypeHelper.AsMemberInfo(config.ClrType));

                builder.FindNavigationProperties(config, navigations, path);

                path.Pop();
            }
        }