public override PropertyValue GetValue(IEntity entity, IProperty property)
        {
            var referenceProperty = property.As <ReferenceProperty>();
            var instanceName      = entity.GetInstanceName();
            var environment       = entity.GetEnvironment();

            var identifier = ContextInstanceManager.TryGet(instanceName);

            if (identifier == null || CheckWithoutLoading(identifier))
            {
                return(PropertyValue.Empty);
            }

            var contextProvider = identifier.Provider.GetService <IContextProvider>();

            using var scope   = identifier.ServiceProvider.TryCreateScope();
            using var service = contextProvider.CreateContextService(new ContextServiceContext(scope?.ServiceProvider ?? identifier.ServiceProvider, identifier));
            service.InitializeEnvironment(environment).InitializeInstanceName(instanceName);

            var repProvider = service.CreateRepositoryProvider(referenceProperty.RelationalType);
            var expression  = BuidRelationExpression(entity, referenceProperty);

            if (expression != null)
            {
                var value = Execute(repProvider.Queryable, expression);
                return(value == null ? PropertyValue.Empty : PropertyValue.NewValue(value));
            }

            return(PropertyValue.Empty);
        }
Example #2
0
        public override PropertyValue GetValue(IEntity entity, IProperty property)
        {
            var entityProperty = property.As <EntityProperty>();

            var instanceName = entity.GetInstanceName();
            var environment  = entity.GetEnvironment();

            var initContext = ContextInstanceManager.Get(instanceName);

            if (initContext == null)
            {
                return(PropertyValue.Empty);
            }

            var provider = initContext.Provider.GetService <IContextProvider>();

            using (var service = provider.CreateContextService(initContext))
            {
                service.InitializeEnvironment(environment).InitializeInstanceName(instanceName);

                var repProvider = provider.CreateRepositoryProvider(entityProperty.RelationalType, service);
                var expression  = BuidRelationExpression(entity, entityProperty);
                if (expression != null)
                {
                    var value = Execute(repProvider.Queryable, expression);

                    //设置实体所属的实体Owner
                    value.As <IEntityRelation>(e => e.Owner = new EntityOwner(entity, property));

                    return(value == null ? PropertyValue.Empty : PropertyValue.NewValue(value));
                }

                return(PropertyValue.Empty);
            }
        }
        public void MultipleTypes()
        {
            HttpContext.Current = CreateHttpContext();

            ContextInstanceManager.Set("some string");
            ContextInstanceManager.Set(123);
            Assert.Equal("some string", ContextInstanceManager.Get <string>());
            Assert.Equal(123, ContextInstanceManager.Get <int>());
        }
        public void SingleType()
        {
            HttpContext.Current = CreateHttpContext();

            Assert.Null(ContextInstanceManager.Get <IManagedTracer>());
            ContextInstanceManager.Set <IManagedTracer>(NullManagedTracer.Instance);
            Assert.Equal(NullManagedTracer.Instance, ContextInstanceManager.Get <IManagedTracer>());
            ContextInstanceManager.Set <IManagedTracer>(null);
            Assert.Null(ContextInstanceManager.Get <IManagedTracer>());
        }
        public void SingleType()
        {
            HttpContext.Current = CreateHttpContext();

            Assert.Null(ContextInstanceManager.Get <string>());
            ContextInstanceManager.Set("123");
            Assert.Equal("123", ContextInstanceManager.Get <string>());
            ContextInstanceManager.Set <string>(null);
            Assert.Null(ContextInstanceManager.Get <string>());
        }
        public override PropertyValue GetValue(IEntity entity, IProperty property)
        {
            var entityProperty = property.As <EntitySetProperty>();
            var instanceName   = entity.GetInstanceName();
            var environment    = entity.GetEnvironment();

            var identifier = ContextInstanceManager.TryGet(instanceName);

            if (identifier == null || CheckWithoutLoading(identifier))
            {
                return(PropertyValue.Empty);
            }

            var contextProvider = identifier.Provider.GetService <IContextProvider>();

            using var scope   = identifier.ServiceProvider.TryCreateScope();
            using var service = contextProvider.CreateContextService(new ContextServiceContext(scope?.ServiceProvider ?? identifier.ServiceProvider, identifier));
            service.InitializeEnvironment(environment).InitializeInstanceName(instanceName);

            var    repProvider = service.CreateRepositoryProvider(entityProperty.RelationalType);
            var    expression  = BuidRelationExpression(entity, entityProperty);
            object result      = null;

            if (expression != null)
            {
                result = Execute(repProvider.Queryable, expression);
                var querySetType = typeof(EntitySet <>).MakeGenericType(entityProperty.RelationalType);
                var list         = querySetType.New(new[] { result });

                //设置实体集所属的实体Owner
                list.As <IEntityRelation>(e => e.Owner = new EntityOwner(entity, property));

                return(PropertyValue.NewValue(list));
            }

            return(PropertyValue.Empty);
        }