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