diff --git a/src/Marr.Data/EntityGraph.cs b/src/Marr.Data/EntityGraph.cs
index aee376b61..72d28dcdf 100644
--- a/src/Marr.Data/EntityGraph.cs
+++ b/src/Marr.Data/EntityGraph.cs
@@ -160,6 +160,14 @@ namespace Marr.Data
get { return _children; }
}
+ ///
+ /// Adds an Child in the graph for LazyLoaded property.
+ ///
+ public void AddLazyRelationship(Relationship childRelationship)
+ {
+ _children.Add(new EntityGraph(childRelationship.RelationshipInfo.EntityType.GetGenericArguments()[0], this, childRelationship));
+ }
+
///
/// Adds an entity to the appropriate place in the object graph.
///
@@ -182,7 +190,10 @@ namespace Marr.Data
}
else // RelationTypes.One
{
- _relationship.Setter(_parent._entity, entityInstance);
+ if (_relationship.IsLazyLoaded)
+ _relationship.Setter(_parent._entity, Activator.CreateInstance(_relationship.MemberType, entityInstance));
+ else
+ _relationship.Setter(_parent._entity, entityInstance);
}
EntityReference entityRef = new EntityReference(entityInstance);
diff --git a/src/Marr.Data/QGen/QueryBuilder.cs b/src/Marr.Data/QGen/QueryBuilder.cs
index cd71c17bd..d4cddf45f 100644
--- a/src/Marr.Data/QGen/QueryBuilder.cs
+++ b/src/Marr.Data/QGen/QueryBuilder.cs
@@ -551,6 +551,17 @@ namespace Marr.Data.QGen
return Join(joinType, rightMember, filterExpression);
}
+ public virtual QueryBuilder Join(JoinType joinType, Expression>> rightEntity, Expression> filterExpression)
+ {
+ _isJoin = true;
+ MemberInfo rightMember = (rightEntity.Body as MemberExpression).Member;
+
+ var relationship = EntGraph.Relationships.Single(v => v.Member == rightMember);
+ EntGraph.AddLazyRelationship(relationship);
+
+ return Join(joinType, rightMember, filterExpression);
+ }
+
public virtual QueryBuilder Join(JoinType joinType, MemberInfo rightMember, Expression> filterExpression)
{
_isJoin = true;