That's not what inheritance is for.
You can just get the columns you want using a query... and you can optimize
saving by using dynamic-update and dynamic-insert.
Anyway, if you have a table with 140 columns, there's probably something
else wrong with your model.
Diego
On Fri, Oct 22, 2010 at 13:22, Brian Chavez <[email protected]> wrote:
> Hi Fabio,
>
> My table has 140 different columns.
>
> Mapping 1 entity to 140 different columns is very hard, especially on
> performance. I do not want to transmit 140 columns of data for each
> row over the wire per request / result set.
>
> In addition, my entity in C# would have 140 properties. This is not
> good.
>
> Therefore, I need to selectively map only the columns (properties) I'm
> interested in.
>
> class A {
> int Id{get;set}
> AProperty{get;set;}
> }
>
> Class A is the minimum amount of information I need in this class
> hierarchy. Derived sub-classes of A would represent different
> projections of the data in Table 1 of a row.
>
> class B : A {
> BProperty{get;set;}
> ...etc. //AProperty is inherited. So is Id
> }
>
> I want to tell NHibernate to give me a view of row 5 that looks like A
> when I CreateCriteria(typeof(A)).WhereIdEquals(5).
> I want to tell NHibernate to give me a view of row 5 that looks like C
> (which has extra column/property) when I
> CreateCriteria(typeof(C)).WhereIdEquals(5).
>
> A row in the DB can be represented by A, B, or C (depending on which
> type I request). Each type has a different projection of the same row.
>
> I'm trying to avoid using AliasToBean transformer.
>
> Thanks,
> Brian
>
>
> On Oct 22, 8:40 am, Fabio Maulo <[email protected]> wrote:
> > A row in the DB is the representation of the state of one object: which
> one?
> >
> > --
> > Fabio Maulo
> >
> > El 22/10/2010, a las 12:05, Brian Chavez <[email protected]>
> escribió:
> >
> > Hi Fabio,
> >
> > Row 5 can be A, B, and C, depending on which one I'm requesting.
> >
> > The class hierarchy at A implements Id.
> >
> > class A{
> > int Id{get;set;}
> > AProperty{get;set;} //Mapped to ColumnA in Table 1
> >
> > }
> >
> > class B : A {
> > BProperty{get;set;} //Mapped to ColumnB in Table 1
> >
> > }
> >
> > class C : B {
> > CProperty{get;set;} //Mapped to ColumnC in Table 1
> >
> > }
> >
> > B and C only map extra properties which are column projections.
> >
> > CreateCriteria(typeof(A)).Add(Expression.Eq("Id",
> > 5)).UniqueResult<A>()
> > CreateCriteria(typeof(C)).Add(Expression.Eq("Id",
> > 5)).UniqueResult<C>()
> >
> > The Database Identity of A and C are the same.
> > The only difference is that C includes C.AProperty, C.BProperty, and
> > C.CProperty projection. Where as A only has A.AProeprty projection.
> >
> > Thanks,
> > Brian
> >
> > On Oct 22, 7:54 am, Fabio Maulo <[email protected]> wrote:
> >
> > A row in the DB is the representation of the state of one object: which
> one?
> >
> > --
> >
> > Fabio Maulo
> >
> > El 22/10/2010, a las 11:40, Brian Chavez <[email protected]>
> escribió:
> >
> > Hi Alan,
> >
> > Thanks so much for the reply. I'm trying to avoid NHibernate using the
> >
> > database to determine the type of object.
> >
> > A single row in Table 1 can be projected into any object in the class
> >
> > hierarchy.
> >
> > For example, Row 5 is A, B, or C; depending on which type I'm
> >
> > requesting.
> >
> > If I CreateCriteria(typeof(C)), then NHibernate has enough information
> >
> > to know what type I'm requesting.
> >
> > I don't want NHibernate to extract type information from the database
> >
> > (ie: discriminator) because class A, B, and C can all represent any
> >
> > row in Table 1.
> >
> > The only difference between A, B, and C classes is the projections of
> >
> > the columns in the table.
> >
> > I hope that clarifies my situation.
> >
> > Any feedback would be appreciated!
> >
> > -Brian
> >
> > On Oct 22, 7:13 am, "[email protected]"
> >
> > <[email protected]> wrote:
> >
> > You can use formulas as discriminators as opposed to a column. You
> >
> > obviously have some sort of logic that determines the object type?
> >
> > On Oct 22, 9:02 am, Brian Chavez <[email protected]> wrote:
> >
> > Hello.
> >
> > Problem:
> >
> > I have 1 very large table of columns.
> >
> > I have a class hierarchy that represents different projections of the
> >
> > columns of this table.
> >
> > For example:
> >
> > class A{
> >
> > AProperty{get;set;} //Mapped to ColumnA in Table 1
> >
> > }
> >
> > class B : A {
> >
> > BProperty{get;set;} //Mapped to ColumnB in Table 1
> >
> > }
> >
> > class C : B {
> >
> > CProperty{get;set;}
> >
> > }
> >
> > When I ask NHibernate to pull C, I expect to see C.AProperty,
> >
> > C.BProperty, and C.CProperty.
> >
> > Essentially, this class hierarchy represents different scoped
> >
> > projected views of the *same* table.
> >
> > How do I do this in hbm.xml mapping files without adding discriminator
> >
> > values?
> >
> > I've tried to use multiple <union-subclass> attributes and map to the
> >
> > same table, but NH throws an exception:
> >
> > --> NHibernate.DuplicateMappingException : Duplicate table mapping
> >
> > Table 1
> >
> > Any ideas?
> >
> > Thanks,
> >
> > Brian
> >
> > --
> >
> > 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 athttp://
> > 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 athttp://
> 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.
>
>
--
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.