public Page <T> FindAll <T>(PageRequest r, Criteria criteria = null, RelationshipOption rOption = null) { var meta = _context.GetMetaData(typeof(T)); SetDefaultSortIfNotExist(r, meta); var query = CypherTranslator.FindAll(meta, r, criteria); using var session = NewSession(); return(session.ReadTransaction(tx => { var records = tx.Run(query.Items).ToList(); var total = tx.Run(query.Count).Single()[0].As <long>(); var loadRelationship = ShouldLoadRelationship(rOption); var items = EntityTransform.NewInstanceList(records, meta, iNode => { var entity = EntityTransform.NewInstance(iNode, meta); if (!loadRelationship) { return entity; } FetchRelationshipByNodeId(meta, entity, tx, rOption.Depth, new Dictionary <long, object>()); return entity; }).As <IList <T> >(); return new Page <T>(r) { Items = items, TotalItems = total }; })); }
public T FindById <T>(long id, RelationshipOption option = null) { var meta = _context.GetMetaData(typeof(T)); using var session = NewSession(); return(session.ReadTransaction(tx => { var nodeRecord = tx.Run(CypherTranslator.FindNodeById(meta, id)).SingleOrDefault(); if (nodeRecord == null) { return default; } var entity = EntityTransform.NewInstance(nodeRecord, meta); if (ShouldLoadRelationship(option)) { FetchRelationshipByNodeId(meta, entity, tx, option.Depth, new Dictionary <long, object>()); } return entity.As <T>(); })); }
private static bool ShouldLoadRelationship(RelationshipOption o) { return(o != null && o.Load); }