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.

Reply via email to