public void Initializes_all_entity_set_properties_with_setters()
        {
            var setterFactory = new ClrPropertySetterFactory();

            var setFinderMock = new Mock<IDbSetFinder>();
            setFinderMock.Setup(m => m.FindSets(It.IsAny<DbContext>())).Returns(
                new[]
                {
                    new DbSetProperty("One", typeof(string), setterFactory.Create(typeof(JustAContext).GetAnyProperty("One"))),
                    new DbSetProperty("Two", typeof(object), setterFactory.Create(typeof(JustAContext).GetAnyProperty("Two"))),
                    new DbSetProperty("Three", typeof(string), setterFactory.Create(typeof(JustAContext).GetAnyProperty("Three"))),
                    new DbSetProperty("Four", typeof(string), null)
                });

            var customServices = new ServiceCollection()
                .AddInstance<IDbSetInitializer>(new DbSetInitializer(setFinderMock.Object, new DbSetSource()));

            var serviceProvider = TestHelpers.Instance.CreateServiceProvider(customServices);

            using (var context = new JustAContext(serviceProvider, new DbContextOptionsBuilder().Options))
            {
                Assert.NotNull(context.One);
                Assert.NotNull(context.GetTwo());
                Assert.NotNull(context.Three);
                Assert.Null(context.Four);
            }
        }
Example #2
0
        private static DbSetProperty[] FindSetsNonCached(Type contextType)
        {
            var factory = new ClrPropertySetterFactory();

            return(contextType.GetRuntimeProperties()
                   .Where(
                       p => !IsStatic(p) &&
                       !p.GetIndexParameters().Any() &&
                       p.DeclaringType != typeof(DbContext) &&
                       p.PropertyType.GetTypeInfo().IsGenericType &&
                       (p.PropertyType.GetGenericTypeDefinition() == typeof(DbSet <>)
#pragma warning disable CS0618 // Type or member is obsolete
                        || p.PropertyType.GetGenericTypeDefinition() == typeof(DbQuery <>)))
#pragma warning restore CS0618 // Type or member is obsolete
                   .OrderBy(p => p.Name)
                   .Select(
                       p => new DbSetProperty(
                           p.Name,
                           p.PropertyType.GetTypeInfo().GenericTypeArguments.Single(),
                           p.SetMethod == null ? null : factory.Create(p),
#pragma warning disable CS0618 // Type or member is obsolete
                           p.PropertyType.GetGenericTypeDefinition() == typeof(DbQuery <>)))
#pragma warning restore CS0618 // Type or member is obsolete
                   .ToArray());
        }
        public void Initializes_all_entity_set_properties_with_setters()
        {
            var setterFactory = new ClrPropertySetterFactory();

            var setFinderMock = new Mock <IDbSetFinder>();

            setFinderMock.Setup(m => m.FindSets(It.IsAny <DbContext>())).Returns(
                new[]
            {
                new DbSetProperty("One", typeof(string), setterFactory.Create(typeof(JustAContext).GetAnyProperty("One"))),
                new DbSetProperty("Two", typeof(object), setterFactory.Create(typeof(JustAContext).GetAnyProperty("Two"))),
                new DbSetProperty("Three", typeof(string), setterFactory.Create(typeof(JustAContext).GetAnyProperty("Three"))),
                new DbSetProperty("Four", typeof(string), null)
            });

            var customServices = new ServiceCollection()
                                 .AddSingleton <IDbSetInitializer>(new DbSetInitializer(setFinderMock.Object, new DbSetSource()));

            var serviceProvider = InMemoryTestHelpers.Instance.CreateServiceProvider(customServices);

            using (var context = new JustAContext(
                       new DbContextOptionsBuilder().UseInternalServiceProvider(serviceProvider).Options))
            {
                Assert.NotNull(context.One);
                Assert.NotNull(context.GetTwo());
                Assert.NotNull(context.Three);
                Assert.Null(context.Four);
            }
        }
        static ManyToManyCollectionMetadata BuildCollectionMetadata(EntityType parentEntityType, string name)
        {
            PropertyInfo propInfo = parentEntityType.ClrType.GetRuntimeProperty(name);

            if (propInfo == null)
            {
                throw new Exception($"Navigation property '{name}' couldn't be found.");
            }

            Type[] genericArgs;
            if (!propInfo.PropertyType.GetTypeInfo().IsGenericType ||
                (genericArgs = propInfo.PropertyType.GetTypeInfo().GenericTypeArguments).Length != 1)
            {
                throw new Exception($"Type '{propInfo.PropertyType.FullName}' is not a valid collection type.");
            }

            Type       itemType             = genericArgs[0];
            EntityType collectionEntityType = parentEntityType.Model.FindEntityType(itemType);

            ClrPropertyGetterFactory getterFactory = new ClrPropertyGetterFactory();
            ClrPropertySetterFactory setterFactory = new ClrPropertySetterFactory();

            return(new ManyToManyCollectionMetadata
            {
                Getter = getterFactory.Create(propInfo),
                Setter = setterFactory.Create(propInfo),
                ItemType = itemType
            });
        }
        public void Property_is_returned_if_it_implements_IClrPropertySetter()
        {
            var setterMock = new Mock<IClrPropertySetter>();
            var propertyMock = setterMock.As<IProperty>();

            var source = new ClrPropertySetterFactory();

            Assert.Same(setterMock.Object, source.Create(propertyMock.Object));
        }
        public void Property_is_returned_if_it_implements_IClrPropertySetter()
        {
            var setterMock   = new Mock <IClrPropertySetter>();
            var propertyMock = setterMock.As <IProperty>();

            var source = new ClrPropertySetterFactory();

            Assert.Same(setterMock.Object, source.Create(propertyMock.Object));
        }
            public IReadOnlyList <DbSetProperty> FindSets(DbContext context)
            {
                var setterFactory = new ClrPropertySetterFactory();

                return(new[]
                {
                    new DbSetProperty("One", typeof(string), setterFactory.Create(typeof(JustAContext).GetAnyProperty("One"))),
                    new DbSetProperty("Two", typeof(object), setterFactory.Create(typeof(JustAContext).GetAnyProperty("Two"))),
                    new DbSetProperty("Three", typeof(string), setterFactory.Create(typeof(JustAContext).GetAnyProperty("Three"))),
                    new DbSetProperty("Four", typeof(string), null)
                });
            }
        private static DbSetProperty[] FindSetsNonCached(Type contextType)
        {
            var factory = new ClrPropertySetterFactory();

            return(contextType.GetRuntimeProperties()
                   .Where(
                       p => !p.IsStatic() &&
                       !p.GetIndexParameters().Any() &&
                       p.DeclaringType != typeof(DbContext) &&
                       p.PropertyType.GetTypeInfo().IsGenericType &&
                       p.PropertyType.GetGenericTypeDefinition() == typeof(DbSet <>))
                   .OrderBy(p => p.Name)
                   .Select(
                       p => new DbSetProperty(
                           p.Name,
                           p.PropertyType.GenericTypeArguments.Single(),
                           p.SetMethod == null ? null : factory.Create(p)))
                   .ToArray());
        }
Example #9
0
        private static DbSetProperty[] FindSets(Type contextType)
        {
            var factory = new ClrPropertySetterFactory();

            return contextType.GetRuntimeProperties()
                .Where(
                    p => !p.IsStatic()
                         && !p.GetIndexParameters().Any()
                         && p.DeclaringType != typeof(DbContext)
                         && p.PropertyType.GetTypeInfo().IsGenericType
                         && p.PropertyType.GetGenericTypeDefinition() == typeof(DbSet<>))
                .OrderBy(p => p.Name)
                .Select(
                    p => new DbSetProperty(
                        p.Name,
                        p.PropertyType.GetTypeInfo().GenericTypeArguments.Single(),
                        p.SetMethod == null ? null : factory.Create(p)))
                .ToArray();
        }
Example #10
0
        private static DataSetProperty[] FindDataSets(Type contextType)
        {
            var factory = new ClrPropertySetterFactory();

            return(contextType.GetRuntimeProperties()
                   .Where(
                       p => !Extensions.IsStatic(p) &&
                       !p.GetIndexParameters().Any() &&
                       p.DeclaringType != typeof(DonutContext) &&
                       p.PropertyType.GetTypeInfo().IsGenericType &&
                       p.PropertyType.GetGenericTypeDefinition() == typeof(DataSet <>))
                   .OrderBy(p => p.Name)
                   .Select(
                       p => new DataSetProperty(
                           p.Name,
                           p.PropertyType.GetTypeInfo().GenericTypeArguments.Single(),
                           p.SetMethod == null ? null : factory.Create(p))
            {
                Attributes = p.GetCustomAttributes()
            })
                   .ToArray());
        }