示例#1
0
        public void ShouldNotEagerLoad_WhenNavigationIsNotAllowedOnTheRootEntity()
        {
            var attribute = new EagerLoadAttribute(notOnRoot: true);

            var navigationHelperMock = new Mock <NavigationHelper>();

            navigationHelperMock.Setup(helper => helper.GetTypeForNavigation(It.IsAny <INavigation>()))
            .Returns(typeof(Book));

            var strategy = new EagerLoadAttributeIncludeStrategy(navigationHelperMock.Object);
            var context  = new EagerLoadContext(Mock.Of <DbContext>(), strategy);

            var firstNavigationMock = SetupGenericNavigationMock();

            EagerLoadAttributeIncludeStrategy.EagerLoadAttributeCache.TryAdd(firstNavigationMock.Object, attribute);

            context.SetCurrentNavigation(firstNavigationMock.Object);
            Assert.False(strategy.ShouldIncludeCurrentNavigation(context));

            var secondNavigationMock = SetupGenericNavigationMock();

            EagerLoadAttributeIncludeStrategy.EagerLoadAttributeCache.TryAdd(secondNavigationMock.Object, new EagerLoadAttribute());

            context.SetCurrentNavigation(secondNavigationMock.Object);

            context.SetCurrentNavigation(firstNavigationMock.Object);
            Assert.True(strategy.ShouldIncludeCurrentNavigation(context));
        }
示例#2
0
        public void ShouldNotEagerLoad_WhenAttributeSetToNever()
        {
            var strategy = new EagerLoadAttributeIncludeStrategy();
            var context  = new EagerLoadContext(Mock.Of <DbContext>(), strategy);

            var navigationMock = SetupGenericNavigationMock();
            var navigation     = navigationMock.Object;

            context.SetCurrentNavigation(navigation);
            var attribute = new EagerLoadAttribute(never: true);

            EagerLoadAttributeIncludeStrategy.EagerLoadAttributeCache.TryAdd(navigation, attribute);

            Assert.False(strategy.ShouldIncludeCurrentNavigation(context));
        }
        private bool DoesNavigationGoOverTheMaxTypeLimits(EagerLoadContext context, EagerLoadAttribute attribute,
                                                          Type currentNavigationType)
        {
            if (context.NavigationPath.Count <= attribute.MaxRootTypeCount && context.NavigationPath.Count <= attribute.MaxTypeCount)
            {
                return(false);
            }

            var rootCount = 1;
            var typeCount = 0;

            foreach (var nav in context.NavigationPath)
            {
                var type = _navigationHelper.GetTypeForNavigation(nav);
                if (type == context.RootType)
                {
                    rootCount++;
                }

                if (type == currentNavigationType)
                {
                    typeCount++;
                }

                if (rootCount > attribute.MaxRootTypeCount)
                {
                    return(true);
                }

                if (typeCount > attribute.MaxTypeCount)
                {
                    return(true);
                }
            }

            return(false);
        }
示例#4
0
        public void ShouldNotEagerLoad_WhenOverTheTypeCount()
        {
            var attribute = new EagerLoadAttribute(maxTypeCount: 1);

            var navigationHelperMock = new Mock <NavigationHelper>();

            var strategy = new EagerLoadAttributeIncludeStrategy(navigationHelperMock.Object);
            var context  = new EagerLoadContext(Mock.Of <DbContext>(), strategy, rootType: typeof(Publisher));

            var firstNavigationMock = SetupGenericNavigationMock();

            EagerLoadAttributeIncludeStrategy.EagerLoadAttributeCache.TryAdd(firstNavigationMock.Object, attribute);
            navigationHelperMock.Setup(helper => helper.GetTypeForNavigation(It.IsAny <INavigation>()))
            .Returns(typeof(Book));

            context.SetCurrentNavigation(firstNavigationMock.Object);
            Assert.True(strategy.ShouldIncludeCurrentNavigation(context));

            var secondNavigationMock = SetupGenericNavigationMock();

            EagerLoadAttributeIncludeStrategy.EagerLoadAttributeCache.TryAdd(secondNavigationMock.Object,
                                                                             new EagerLoadAttribute());
            navigationHelperMock.Setup(helper => helper.GetTypeForNavigation(It.IsAny <INavigation>()))
            .Returns(typeof(Author));

            context.SetCurrentNavigation(secondNavigationMock.Object);
            Assert.True(strategy.ShouldIncludeCurrentNavigation(context));

            var thirdNavigationMock = SetupGenericNavigationMock();

            EagerLoadAttributeIncludeStrategy.EagerLoadAttributeCache.TryAdd(thirdNavigationMock.Object, attribute);
            navigationHelperMock.Setup(helper => helper.GetTypeForNavigation(It.IsAny <INavigation>()))
            .Returns(typeof(Book));

            context.SetCurrentNavigation(thirdNavigationMock.Object);
            Assert.False(strategy.ShouldIncludeCurrentNavigation(context));
        }