public IList <Album> GetAlbumsByArtistID(int artistID) { IList <Album> result = new List <Album>(); ISession session = SessionFactory.GetSession(); try { DetachedCriteria artistsCriteria = DetachedCriteria.For <AlbumEntity>().CreateCriteria("Artists"). Add(Restrictions.Eq("ID", artistID)). SetProjection(Property.ForName("ID")); ICriteria criteria = session.CreateCriteria <AlbumEntity>(). Add(Subqueries.PropertyIn("ID", artistsCriteria)).AddOrder(new Order("ID", true)); IList <AlbumEntity> albums = criteria.List <AlbumEntity>(); EntityConverter converter = new EntityConverter(); foreach (AlbumEntity dataEntity in albums) { Album businessEntity = converter.FromDataEntity(dataEntity, AlbumConvertOptions.Small); result.Add(businessEntity); } } catch (Exception ex) { Logger.Write(ex); } finally { session.Close(); } return(result); }
public IPagedList <TaggedObject> GetTaggedObjects(ILoadOptions loadOptions) { /* * This method uses sophisticated stored procedure which performs actual pagination and * filtering logic against special database view. * * First record of result set is stub one and returns total number of items matching filtering * rules. */ var result = new PagedList <TaggedObject>(); ISession session = SessionFactory.GetSession(); try { var specialOptions = loadOptions as TagLoadOptions; string entityTypeFilter = String.Empty; string entityNameFilter = String.Empty; if (specialOptions != null) { if (!specialOptions.ExcludeAlbums && !specialOptions.ExcludeArtists) { entityTypeFilter = String.Format("{0},{1}", (int)TaggedObjectType.Artist, (int)TaggedObjectType.Album); } else if (!specialOptions.ExcludeAlbums) { entityTypeFilter = String.Format("{0}", (int)TaggedObjectType.Album); } else if (!specialOptions.ExcludeArtists) { entityTypeFilter = String.Format("{0}", (int)TaggedObjectType.Artist); } entityNameFilter = specialOptions.EntityName == null ? String.Empty : specialOptions.EntityName; } var query = session.GetNamedQuery("GetTaggedObjects"); query.SetParameter("tagIDs", loadOptions.FilterValue); query.SetParameter("entityTypes", entityTypeFilter); query.SetParameter("ioffset", loadOptions.FirstResult); query.SetParameter("ilimit", loadOptions.MaxResults); query.SetParameter("entityName", entityNameFilter); var dataEntities = query.SetResultTransformer(new TaggedObjectResultTransformer()).List <TaggedObjectEntity>(); //get stub entity generated by sp, which stores total items count needed for pagination var stubCounterEntity = dataEntities.Where(e => e.ObjectType == -1).First(); dataEntities.Remove(stubCounterEntity); EntityConverter converter = new EntityConverter(); foreach (var de in dataEntities) { var tag = converter.FromDataEntity(de); result.Add(tag); } result.TotalItems = stubCounterEntity.ID; } catch (Exception ex) { Logger.Write(ex); } finally { session.Close(); } return(result); }