Exemplo n.º 1
0
        private T MapInternal(Func <PropertyMapping, PropertyValue> func)
        {
            var entity = typeof(T).New <IEntity>();

            if (entity == null)
            {
                return(default(T));
            }

            if (Initializer != null)
            {
                Initializer(entity);
            }

            entity.SetState(EntityState.Unchanged);
            entity.As <ISupportInitializeNotification>(s => s.BeginInit());

            foreach (var mapper in mapping)
            {
                var value = func(mapper);
                entity.InitializateValue(mapper.Property, value);
            }

            if (alwaysProperties != null)
            {
                foreach (var property in alwaysProperties)
                {
                    EntityLazyloader.AsyncLoad(entity, property);
                }
            }

            entity.As <ISupportInitializeNotification>(s => s.EndInit());
            return((T)entity);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 为实体加载指定的具有延迟行为的属性的值,该属性为 <see cref="RelationProperty"/> 的子类,且 <see cref="LoadBehavior"/> 属性应设置为 <see cref="LoadBehavior.Lazy"/>。
        /// </summary>
        /// <param name="entity">当前的实体对象。</param>
        /// <param name="property">要进行加载的属性。</param>
        public static void Lazyload(this IEntity entity, IProperty property)
        {
            var value  = EntityLazyloader.Load(entity, property);
            var extend = entity as IEntityStatefulExtension;

            if (extend != null)
            {
                extend.InitializateValue(property, value);
            }
            else
            {
                entity.InternalSetValue(property, value);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// 处理附加属性的值。
        /// </summary>
        /// <param name="property"></param>
        /// <returns></returns>
        private PropertyValue ProcessSupposedProperty(IProperty property)
        {
            if (property is RelationProperty relationProperty &&
                relationProperty.Options.LoadBehavior != LoadBehavior.None)
            {
                var value = EntityLazyloader.Load(this, relationProperty);

                if (value != null && !PropertyValue.IsEmpty(value))
                {
                    InnerLazyMgr.SetValueCreated(property.Name);
                    value._dataType = property.Info.DataType;
                    InnerEntry.Initializate(property.Name, value);
                }

                return(value);
            }

            return(PropertyValue.Empty);
        }
Exemplo n.º 4
0
        /// <summary>
        /// 处理附加属性的值。
        /// </summary>
        /// <param name="property"></param>
        /// <returns></returns>
        private PropertyValue ProcessSupposedProperty(IProperty property)
        {
            var relationProperty = property.As <RelationProperty>();

            if (relationProperty != null &&
                relationProperty.Options.LoadBehavior != LoadBehavior.None)
            {
                var value = EntityLazyloader.Load(this, relationProperty);
                lazyMgr.SetValueCreated(property.Name);
                if (value != null)
                {
                    valueEntry.Initializate(property.Name, value, () => value.Property = property);
                }

                return(value);
            }

            return(null);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 为实体加载指定的具有延迟行为的属性的值,该属性为 <see cref="RelationProperty"/> 的子类,且 <see cref="LoadBehavior"/> 属性应设置为 <see cref="LoadBehavior.Lazy"/>。
        /// </summary>
        /// <param name="entity">当前的实体对象。</param>
        /// <param name="property">要进行加载的属性。</param>
        public static void Lazyload(this IEntity entity, IProperty property)
        {
            var value = EntityLazyloader.Load(entity, property);

            entity.InitializeValue(property, value);
        }