Example #1
0
        private Dictionary <Type, List <string> > GetSets()
        {
            DbContextTypesInitializersPair initializersPair;

            if (!DbSetDiscoveryService._objectSetInitializers.TryGetValue(this._context.GetType(), out initializersPair))
            {
                ParameterExpression               parameterExpression         = Expression.Parameter(typeof(DbContext), "dbContext");
                List <Action <DbContext> >        initDelegates               = new List <Action <DbContext> >();
                Dictionary <Type, List <string> > entityTypeToPropertyNameMap = new Dictionary <Type, List <string> >();
                foreach (PropertyInfo propertyInfo in this._context.GetType().GetInstanceProperties().Where <PropertyInfo>((Func <PropertyInfo, bool>)(p =>
                {
                    if (p.GetIndexParameters().Length == 0)
                    {
                        return(p.DeclaringType != typeof(DbContext));
                    }
                    return(false);
                })))
                {
                    Type setType = DbSetDiscoveryService.GetSetType(propertyInfo.PropertyType);
                    if (setType != (Type)null)
                    {
                        if (!setType.IsValidStructuralType())
                        {
                            throw Error.InvalidEntityType((object)setType);
                        }
                        List <string> stringList;
                        if (!entityTypeToPropertyNameMap.TryGetValue(setType, out stringList))
                        {
                            stringList = new List <string>();
                            entityTypeToPropertyNameMap[setType] = stringList;
                        }
                        stringList.Add(propertyInfo.Name);
                        if (DbSetDiscoveryService.DbSetPropertyShouldBeInitialized(propertyInfo))
                        {
                            MethodInfo method1 = propertyInfo.Setter();
                            if (method1 != (MethodInfo)null && method1.IsPublic)
                            {
                                MethodInfo           method2 = DbSetDiscoveryService.SetMethod.MakeGenericMethod(setType);
                                MethodCallExpression methodCallExpression1 = Expression.Call((Expression)parameterExpression, method2);
                                MethodCallExpression methodCallExpression2 = Expression.Call((Expression)Expression.Convert((Expression)parameterExpression, this._context.GetType()), method1, (Expression)methodCallExpression1);
                                initDelegates.Add(Expression.Lambda <Action <DbContext> >((Expression)methodCallExpression2, parameterExpression).Compile());
                            }
                        }
                    }
                }
                Action <DbContext> setsInitializer = (Action <DbContext>)(dbContext =>
                {
                    foreach (Action <DbContext> action in initDelegates)
                    {
                        action(dbContext);
                    }
                });
                initializersPair = new DbContextTypesInitializersPair(entityTypeToPropertyNameMap, setsInitializer);
                DbSetDiscoveryService._objectSetInitializers.TryAdd(this._context.GetType(), initializersPair);
            }
            return(initializersPair.EntityTypeToPropertyNameMap);
        }
        private static void DiscoverAndInitializeSets(DbContext context, int setCount)
        {
            var mockBuilder = new Mock <DbModelBuilder>();
            var mockConfig  = new Mock <EntityTypeConfigurationForMock>();

            mockBuilder.Setup(b => b.Entity(It.IsAny <Type>())).Returns(mockConfig.Object);

            var discoveryService = new DbSetDiscoveryService(context);

            discoveryService.RegisterSets(mockBuilder.Object);

            mockBuilder.Verify(b => b.Entity(It.IsAny <Type>()), Times.Exactly(setCount));
            mockConfig.VerifySet(c => c.EntitySetName = It.IsAny <string>(), Times.Exactly(setCount));
        }
Example #3
0
 private static Type GetSetType(Type declaredType)
 {
     if (!declaredType.IsArray)
     {
         Type setElementType = DbSetDiscoveryService.GetSetElementType(declaredType);
         if (setElementType != (Type)null)
         {
             Type c = typeof(DbSet <>).MakeGenericType(setElementType);
             if (declaredType.IsAssignableFrom(c))
             {
                 return(setElementType);
             }
         }
     }
     return((Type)null);
 }
        private void AssertExpectedSetsDiscovered(DbContext context, IEnumerable <string> expected)
        {
            var mockBuilder = new Mock <DbModelBuilder>();
            var mockConfig  = new Mock <EntityTypeConfigurationForMock>();

            mockBuilder.Setup(b => b.Entity(It.IsAny <Type>())).Returns(mockConfig.Object);

            var discoveryService = new DbSetDiscoveryService(context);

            discoveryService.RegisterSets(mockBuilder.Object);

            foreach (var setName in expected)
            {
                var name = setName;
                mockConfig.VerifySet(c => c.EntitySetName = name, Times.Once());
            }
        }
        private static void DiscoverAndInitializeSets(DbContext context, int setCount)
        {
            var mockBuilder = new Mock<DbModelBuilder>();
            var mockConfig = new Mock<EntityTypeConfigurationForMock>();
            mockBuilder.Setup(b => b.Entity(It.IsAny<Type>())).Returns(mockConfig.Object);

            var discoveryService = new DbSetDiscoveryService(context);
            discoveryService.RegisterSets(mockBuilder.Object);

            mockBuilder.Verify(b => b.Entity(It.IsAny<Type>()), Times.Exactly(setCount));
            mockConfig.VerifySet(c => c.EntitySetName = It.IsAny<string>(), Times.Exactly(setCount));
        }
        private void AssertExpectedSetsDiscovered(DbContext context, IEnumerable<string> expected)
        {
            var mockBuilder = new Mock<DbModelBuilder>();
            var mockConfig = new Mock<EntityTypeConfigurationForMock>();
            mockBuilder.Setup(b => b.Entity(It.IsAny<Type>())).Returns(mockConfig.Object);

            var discoveryService = new DbSetDiscoveryService(context);
            discoveryService.RegisterSets(mockBuilder.Object);

            foreach (var setName in expected)
            {
                var name = setName;
                mockConfig.VerifySet(c => c.EntitySetName = name, Times.Once());
            }
        }