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