Example #1
0
        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
                };
            }));
        }
Example #2
0
        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>();
            }));
        }
Example #3
0
 private static bool ShouldLoadRelationship(RelationshipOption o)
 {
     return(o != null && o.Load);
 }