private Task _LoadRelationsAsync(object obj, IEnumerable <LambdaExpression> relationsToLoad) { return(Task.Run(() => { TableSchema parentSchema = GetSchema(obj.GetType()); Ir.LoadRelations(obj, LambdaRelationFinder.FindRelations(relationsToLoad, parentSchema)); })); }
internal T Load(T obj, object key, params Expression <Func <T, object> >[] relationsToLoad) { if (key == null) { throw new ArgumentNullException(nameof(key)); } Dictionary <string, object> primaryKey; var keyTypeInspector = key.GetType().Inspector(); if (keyTypeInspector.Is(TypeFlags.Numeric | TypeFlags.Enum | TypeFlags.String | TypeFlags.Guid)) { if (Schema.PrimaryKeys.Length != 1) { throw new Exception($"Invalid key for {typeof (T)}"); } primaryKey = new Dictionary <string, object>() { { Schema.PrimaryKeys[0].MappedName, key } }; } else { primaryKey = Schema.PrimaryKeys.ToDictionary(pk => pk.MappedName, pk => GetFieldOrPropertyValue(key, pk.FieldName)); } var serializedEntity = DataProvider.ReadObject(primaryKey, Schema); if (serializedEntity == null) { return(default(T)); } Schema.UpdateObject(obj, serializedEntity); var relations = LambdaRelationFinder.FindRelations(relationsToLoad, Schema); relations = Schema.BuildPreloadRelationSet(relations); Ir.LoadRelations(obj, relations); Fire_ObjectRead(obj); return(obj); }
private void _LoadRelations(object obj, IEnumerable <LambdaExpression> relationsToLoad /*, TableSchema parentSchema*/) { TableSchema parentSchema = GetSchema(obj.GetType()); Ir.LoadRelations(obj, LambdaRelationFinder.FindRelations(relationsToLoad, parentSchema)); }