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