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] > >> > > > >> . > >> > 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] > >> > > >> . > >> 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] > > > > > . > > 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.
