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]. > 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]. For more options, visit this group at http://groups.google.com/group/nhusers?hl=en.
