Is the answer to this using Projections? How should I go about making this work? all the examples I can find of projections don't seem to be about keeping a top-level entity's properties from being returned, but more for limiting the return of the top-level entity results by some child-entity's property value.
On Jul 8, 9:19 am, Joe B <[email protected]> wrote: > If I am unable to do this in the mapping, can it be done at query time > to populate the various other properties? > > On Jul 7, 11:07 am, Joe B <[email protected]> wrote: > > > > > I have a situation which I can't believe is all that abnormal, but I > > can't seem to make happen what I think I should be able to do. > > > I have a Ticket & Customer class. > > > A Customer calls in, the agent creates a ticket. easy 'nuff. > > > Now, agents need to see an open issues list (not customer-specific) > > > The Ticket entity is rather wide (100 properties), and also has some > > collections. > > However, for the list, we only need to show a subset of ticket > > properties, and a subset of customer properties. > > > So, I created an IssueSearchResult class, with just the properties we > > need in the grid. > > > The problem is that ALL the examples of join I've seen are the other > > way around. > > -- That is, my Customer table needs a TrackedItemID field. > > -- I can map the three customer-specific fields just like I do the > > GroupAssignedTime, but it seems to me that 3 scalar sub-queries that > > join the same table on the same row is overhead and a performance > > waste - all to do a simple join. > > > All I really need is a way to specify HOW the join is ... joined, > > rather than have NH _assume_ how it should be joined. > > > The generated SQL: > > > this_.SAVED_CUSTOMER_PARENT_ID as SAVED40_38_0_, > > this_1_.EHD_FLAG as EHD5_19_0_, > > this_1_.VIP_FLAG as VIP3_19_0_, > > this_1_.STRATEGIC_FLAG as STRATEGIC4_19_0_, > > (-- GroupAssignedTimeFormula -- ) as formula0_0_ > > > FROM TS_TROUBLE_TICKET this_ > > inner join TS_CUSTOMERS this_1_ > > on this_.TRACKED_ITEM_ID = this_1_.TS_CUSTOMER_ID > > > But what I need is: > > > FROM TS_TROUBLE_TICKET this_ > > inner join TS_CUSTOMERS this_1_ > > on this_.TS_CUSTOMER_ID = this_1_.ID > > > -------------------- Is it possible to get the needed join ? > > ------------------ > > > Here is my mapping. I apologize for posting the Fluent mappings, but > > 'whether or not I should be able to do this' isn't dependent on the > > method I go about doing the mapping (with the exception of, FNH > > doesn't support it, but that's something I can address if I have to) > > > public IssueSearchResultMap() > > { > > > base.ReadOnly(); > > base.Cache.ReadOnly(); > > > base.Id(x => x.TrackedItemID, > > IssueMap.Fields.TRACKED_ITEM_ID); > > > base.Table("ISSUES"); > > > base.Join("CUSTOMERS", m => > > { > > m.KeyColumn(IssueMap.Fields.CUSTOMER_ID); > > > m.Map(x => x.IsEHD, > > CustomerMap.Fields.EHD_FLAG).CustomType("YesNo"); > > m.Map(x => x.IsVIP, > > CustomerMap.Fields.VIP_FLAG).CustomType("YesNo"); > > m.Map(x => x.IsStrategic, > > CustomerMap.Fields.STRATEGIC_FLAG).CustomType("YesNo"); > > }); > > > // this works great. > > // collapsing a historical audit collection into a single > > DateTime - to calculate TimeInQueue > > base.Map(x => x.GroupAssignedTime) > > .Formula(string.Format("(SELECT gats.start_time " + > > "FROM ts_group_assigned_times gats " + > > "WHERE gats.tracked_item_id = {0} " + > > "AND gats.end_time is null)", > > TechSupportTicketMap.Fields.TRACKED_ITEM_ID > > )); > > > // this is supposed to be doing the same thing as > > GroupAssignedTime, but Oracle doesn't like it. > > // I get a 'right paren not closed' or similar error. if I > > remove the Order By it doesn't complain. > > // This isn't what I'm posting about, but if anyone can > > shed some light, awesome :) > > // > > //base.Map(x => x.NextScheduledCallbackTime) > > // .Formula(string.Format("(select > > cbss.date_of_callback from (select cbs.date_of_callback from > > ts_callbacks cbs " + > > // "where cbs.tracked_item_id = {0} " + > > // "and cbs.status = 'scheduled' " + > > // "order by cbs.date_of_callback asc) cbss " > > + > > // "where cbss.rownum = 1 )", > > // TechSupportTicketMap.Fields.TRACKED_ITEM_ID > > // )); > > > // just here for consistency with the above generated SQL > > base.Map(x => x.SavedCustomerParentId, > > IssueMap.Fields.SAVED_CUSTOMER_PARENT_ID); > > > }- Hide quoted text - > > > - Show quoted text -- Hide quoted text - > > - Show quoted text - -- You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/nhusers?hl=en.
