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.

Reply via email to