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