public override PropertyValue GetValue(IEntity entity, IProperty property) { var entityProperty = property.As <EntityProperty>(); var instanceName = GetInstanceName(entity, entityProperty.RelationType); var environment = GetEnvironment(entity); using (var context = new InternalContext(instanceName)) { context.As <IEntityPersistentEnvironment>(s => s.Environment = environment); context.As <IEntityPersistentInstanceContainer>(s => s.InstanceName = instanceName); var provider = context.CreateRepositoryProvider(entityProperty.RelationType); var expression = BuidRelationExpression(entity, entityProperty); if (expression != null) { var value = Execute(provider.Queryable, expression); //设置实体所属的实体Owner value.As <IEntityRelation>(e => e.Owner = new EntityOwner(entity, property)); return(value == null ? PropertyValue.Empty : PropertyValue.NewValue(value)); } return(PropertyValue.Empty); } }
/// <summary> /// 初始化 <see cref="DefaultRepositoryProvider"/> 类的新实例。 /// </summary> /// <param name="context"></param> public DefaultRepositoryProvider(InternalContext context) { this.context = context; var entityQueryProvider = new EntityQueryProvider(context); context.As <IEntityPersistentInstanceContainer>(s => entityQueryProvider.InitializeInstanceName(s.InstanceName)); QueryProvider = new QueryProvider(entityQueryProvider); Queryable = new QuerySet <TEntity>(QueryProvider, null); }
public override PropertyValue GetValue(IEntity entity, IProperty property) { var referenceProperty = property.As <ReferenceProperty>(); var instanceName = GetInstanceName(entity, referenceProperty.RelationType); var environment = GetEnvironment(entity); using (var context = new InternalContext(instanceName)) { context.As <IEntityPersistentEnvironment>(s => s.Environment = environment); context.As <IEntityPersistentInstanceContainer>(s => s.InstanceName = instanceName); var provider = context.CreateRepositoryProvider(referenceProperty.RelationType); var expression = BuidRelationExpression(entity, referenceProperty); object result = null; if (expression != null) { result = Execute(provider.Queryable, expression); } return(PropertyValueHelper.NewValue(result)); } }