public object Poco(object entity, Func <object, object> subPocoHandler) { var metadata = RepositoryFramework.GetDefineMetadata(entity.GetType()); var pa = PropertyAccessorFactory.GetPropertyAccess(metadata.EntityType); var poco = entity; var pocoed = false; if (ProxyProvider.IsProxy(entity) && metadata.ClassJoinDefines.Count > 0) { poco = pa.CreateInstance(); metadata.MergeData(entity, poco); pocoed = true; } foreach (var property in metadata.CascadeProperties) { var value = pa.GetGetter(property.Name).Get(entity); if (value != null) { var valuePoco = subPocoHandler(value); if (valuePoco != value || pocoed) { pa.GetSetter(property.Name).Set(poco, valuePoco); } } } return(poco); }
public object Proxy(object entity, Func <object, object> subProxyHandler) { var metadata = RepositoryFramework.GetDefineMetadata(entity.GetType()); var proxy = entity; var proxyed = false; if (!ProxyProvider.IsProxy(entity) && metadata.ClassJoinDefines.Count > 0) { proxy = ProxyProvider.CreateEntityProxy(metadata.EntityType); metadata.MergeData(entity, proxy); proxyed = true; } var pa = PropertyAccessorFactory.GetPropertyAccess(metadata.EntityType); foreach (var property in metadata.CascadeProperties) { if (EntityInterceptor.PropertyInited(entity, property.Name)) { var value = pa.GetGetter(property.Name).Get(entity); if (value != null) { var valueProxy = subProxyHandler(value); if (valueProxy != value || proxyed) { pa.GetSetter(property.Name).Set(proxy, valueProxy); } } } } return(proxy); }
public void Fetch(object entity, Action <object> subFetchHandler) { var metadata = RepositoryFramework.GetDefineMetadata(entity.GetType()); var pa = PropertyAccessorFactory.GetPropertyAccess(metadata.EntityType); foreach (var property in metadata.CascadeProperties) { var value = pa.GetGetter(property.Name).Get(entity); if (value != null) { subFetchHandler(value); } } }