Hi,

I'm trying to map quite a complex hierarchy and I was hoping someone
here might be able to give me some guidance? I've tried to represent
it below but note that I am not using the real class names to make it
clearer.

Class Grandparent
  Property Parents As IList(Of Parent)
End Class

Class Parent
  Property Children As IList(Of Child)
  Property Parent As GrandParent
End Class

Class MustInherit Child
  Property GrandParent As GrandParent
  Property Parent As Parent
End Class

Class Boy
  Inherits Child
End Class

Class Girl
  Inherits Child
End Class

OK, simple enough. This is mapped successfully using FNH, with the
only complexity being that Boy and Girl are mapped using
DiscriminateSubClassesOnColumn.

Having done all that, I now need to do something like the following

Class SpecialGrandparent
  Inherits Grandparent
  Public Property AdditionalInfo As String
End Class

Class SpecialParent
  Inherits Parent
  Public Property AdditionalInfo As String
End Class

Class SpecialChild
  Inherits Child
  Public Property AdditionalInfo As String
End Class

The complexity comes from the fact that I need the SpecialGrandParent
to look and behave like a normal GrandParent class, but also be able
to access the 'AdditionalInfo' when needed.

So, I thought I'd solved this, and this is how I did it. (I'll just
show the example for one class but you'll get the idea)

Public Interface IGrandParent
  Property Parents  As IList(Of IParent)
End Interface

Class Grandparent
  Implements IGrandParent
  Property Parents  As IList(Of IParent) Implements
IGrandParent.Parents
End Class

Class SpecialGrandparent
  Implements IGrandParent

  Private _innerGrandParent As IGrandParent = New GrandParent

  Property Parents  As IList(Of IParent) Implements
IGrandParent.Parents
    Return _innerGrandParent.Parents
  End Property

  Public Property AdditionalInfo As String
End Class

This all works great but when I come to the mapping, I can't figure
out what's best to do. The way I have it now is that the
_innerGrandParent property is exposed as a public Property which I can
then map using map.References(). This ensures that the
_innerGrandParent field gets populated ok which is then used to proxy
all the fields in the interface.

However, if I then write a query which uses SpecialGrandParent.Parents
for example, I get an error because the Parents property hasn't been
explicitly mapped (it's being proxied from the _innerGrandParent
field).


Sorry for the long post but I'm so close to having this work, but yet
so far!

Thanks

James



--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Fluent NHibernate" 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/fluent-nhibernate?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to