You don't normally have the discriminator as an actual property in your
entity too, it's usually just a column. That's not to say it's incorrect,
just something I've not seen before. Perhaps try it without.

On Fri, Mar 6, 2009 at 2:21 AM, Roger Heim <roger.h...@gmail.com> wrote:

>
> Hi All,
>
> I've just started using FNH and NHibernate. Between FNH and Steve
> Bohlen's Summer of NHibernate videos I think I'm starting to get my
> brain wrapped around this stuff but I have a question about using
> discriminators and sub-classes.
>
> I have an entity that implements a General Ledger account. The account
> can be one of 5 types: Asset, Liability, Equity, Income or Expense and
> is represented by an Int32 that has the value 1-5. I created a
> GLAccount class that contains all the properties. The class looks like
> this:
>  public class GLAccount
>  {
>    public virtual Guid AccountID { get; private set;}
>    public virtual decimal AccountNumber {get; set;}
>    public virtual string Description {get;set;}
>    public virtual int AccountType {get;set;}
>    public virtual int Version {get; private set;}
>  }
>
> I also created five classes for the different account types:
> GLAssetAccount, GLLiabilityAccount, GLEquityAccount, GLIncomeAccount
> and GLExpenseAccount. They are all subclasses of GLAccount but they
> have no additional properties. Here's the discriminator portion of the
> mapping class:
>  DiscriminatorSubClassesOnColumn<int>("AccountType"), -1)
>    .SubClass<GLAssetAccount>(1), m=>m.Map
> (x=>x.AccountType).Not.Nullable())
>    .SubClass<GLLiabilityAccount>(2), m=>m.Map
> (x=>x.AccountType).Not.Nullable())
>    .SubClass<GLEquityAccount>(3), m=>m.Map
> (x=>x.AccountType).Not.Nullable())
>    .SubClass<GLIncomeAccount>(4), m=>m.Map
> (x=>x.AccountType).Not.Nullable())
>    .SubClass<GLExpenseAccount>(5), m=>m.Map
> (x=>x.AccountType).Not.Nullable());
>
> In my unit test I try to add an instance of the GLAccount object and
> it passes but it assigns -1 as the AccountType even if I specifically
> set it; I assume that's because of the -1 in the
> DiscriminatorSubClassesOnColumn line. But if I try to add an instance
> of a GLAssetAccount object it fails and throws an
> IndexOutOfRangeException: Invalid index 4 for this
> SqlParameterCollection with Count=4 and I never get to see the
> generated SQL.
>
> Based on my objects is using Table-Per-Class-Hierarchy correct? Can
> anyone tell me what I've done wrong?
>
> Roger Heim
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Fluent NHibernate" group.
To post to this group, send email to fluent-nhibernate@googlegroups.com
To unsubscribe from this group, send email to 
fluent-nhibernate+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/fluent-nhibernate?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to