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)); }
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()); } }