You can do it in the mapping through <loader> On Mon, Sep 27, 2010 at 2:22 AM, Filip Kinsky <[email protected]> wrote:
> So, does it mean that I won't be able to query over polymorphic > DisplayName if I don't denormalize it and persist its value in > TransferParticipantBase table? The SQL to support this looks so simple > that I can't believe I won't be able to achieve this..... > > On Sep 26, 7:28 pm, Fabio Maulo <[email protected]> wrote: > > Formula will map to just one virtual-column. > > You can't have different Formulas for the same column in the same > hierarchy; > > you can't apply polymorphism in the server-side because it does not know > > what mean. > > > > 2010/9/26 Filip Kinský <[email protected]> > > > > > > > > > > > > > Thanks for your advice.. Unfortunately denormalization of DisplayName > is > > > not viable solution in this case. I gave just simple sample classes, > but > > > there'll be more complex TransferParticipantBase-derived classes with > > > DisplayName build from associated entities etc. Classes like: > > > > > public abstract class CustomerTransferParticipant > > > { > > > public Customer Customer { get; set; } > > > public override string DisplayName { get { return String.Format("{0} > > > ({1})", Customer.Name, Customer.Number); }} > > > } > > > > > I don't want to denormalize DisplayName because of classes like this, > where > > > denormalization will force updating DisplayName every time related > entity > > > changes. I'm searching for some better solution which would handle > > > DisplayName in polymorphic way... I thought the formula would let me do > > > this, but the approach I tried to achieve is either not supported by NH > or I > > > just found some bug in NH3 Alpha. > > > > > On Sat, Sep 25, 2010 at 4:52 AM, José F. Romaniello < > > > [email protected]> wrote: > > > > >> You can use access=“readonly“ in the property, this will persist the > > >> value of the property and will let you to query... > > > > >> 2010/9/24, Filip Kinsky <[email protected]>: > > >> > I have following domain model: > > > > >> > public abstract class TransferParticipantBase: Entity > > >> > { > > >> > public abstract string DisplayName { get; } > > >> > } > > > > >> > public class Driver : TransferParticipantBase > > >> > { > > >> > .... > > >> > public override string DisplayName > > >> > { > > >> > get { return LastName + " " + FirstName; } > > >> > } > > >> > } > > > > >> > public class Store : TransferParticipantBase > > >> > { > > >> > .... > > >> > public override string DisplayName > > >> > { > > >> > get { return Name; } > > >> > } > > >> > } > > > > >> > So the DisplayName property is read-only and each subclass builds > the > > >> > value using different persistent properties. I'd like to add support > > >> > for queries over DisplayName property, but I'm not able to fugure > out > > >> > how to define the mapping. The query should look like > > >> > session.QueryOver<TransferParticipantBase>.Where(p => p.DisplayName > = > > >> > "test"). I tried following mapping (using FluentNH): > > > > >> > public class TransferParticipantMap: > > >> > ClassMap<TransferParticipantBase> > > >> > { > > >> > public TransferParticipantMap() > > >> > { > > >> > Id(x => x.Id); > > >> > } > > >> > } > > > > >> > public class DriverMap: SubclassMap<Driver> > > >> > { > > >> > public DriverMap() > > >> > { > > >> > Map(x => x.DisplayName) > > >> > .Access.None() > > >> > .Formula("LASTNAME || ' ' || > FIRSTNAME"); > > >> > Map(x => x.FirstName); > > >> > Map(x => x.LastName).Not.Nullable(); > > >> > } > > >> > } > > > > >> > public class StoreMap: SubclassMap<Store> > > >> > { > > >> > public StoreMap() > > >> > { > > >> > Table("STORE"); > > >> > Map(x => x.DisplayName) > > >> > .Access.None() > > >> > .Formula("NAME"); > > >> > Map(x => x.Name).Not.Nullable(); > > >> > } > > >> > } > > > > >> > This unfortunately does not work - NH generates wrong SQL. I get SQL > > >> > like "...WHERE DRIVER.NAME LIKE @p0" instead of something like > > >> > "...WHERE STORE.NAME LIKE @p0 OR (DRIVER.LASTNAME || ' ' || > > >> > DRIVER.FIRSTNAME) LIKE @p0". It looks like DisplayName mapping with > > >> > formula for Store applies to both entities. > > > > >> > Is there any chance I could get this working without redesigning my > > >> > entities? I'm using NH 3 Alpha. > > > > >> > -- > > >> > 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]<nhusers%[email protected]> > <nhusers%[email protected]<nhusers%[email protected]>> > > >> . > > >> > For more options, visit this group at > > >> >http://groups.google.com/group/nhusers?hl=en. > > > > >> -- > > >> Enviado desde mi dispositivo móvil > > > > >> -- > > >> 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]<nhusers%[email protected]> > <nhusers%[email protected]<nhusers%[email protected]>> > > >> . > > >> For more options, visit this group at > > >>http://groups.google.com/group/nhusers?hl=en. > > > > > -- > > > 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]<nhusers%[email protected]> > <nhusers%[email protected]<nhusers%[email protected]>> > > > . > > > For more options, visit this group at > > >http://groups.google.com/group/nhusers?hl=en. > > > > -- > > Fabio Maulo > > -- > 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]<nhusers%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/nhusers?hl=en. > > -- Fabio Maulo -- 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.
