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].
>
> 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].
> 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].
For more options, visit this group at
http://groups.google.com/group/nhusers?hl=en.