Search code examples
c#nhibernatenhibernate-mapping

How to look up an NHibernate entity's table mapping from the type of the entity?


Once I've mapped my domain in NHibernate, how can I reverse lookup those mappings somewhere else in my code?

Example:

The entity Pony is mapped to a table named "AAZF1203" for some reason. (Stupid legacy database table names!) I want to find out that table name from the NH mappings using only the typeof(Pony) because I have to write a query elsewhere.

How can I make the following test pass?

private const string LegacyPonyTableName = "AAZF1203";

[Test]
public void MakeSureThatThePonyEntityIsMappedToCorrectTable()
{
    string ponyTable = GetNHibernateTableMappingFor(typeof(Pony));
    Assert.AreEqual(LegacyPonyTableName, ponyTable);
}

In other words, what does the GetNHibernateTableMappingFor(Type t) need to look like?


Solution

  • At which point do you need that information?

    Because it depends on what you have...

    Not long ago I had to get the table name from an audit event listener, and I used this:

    IPostDatabaseOperationEventArgs args //parameter
    var tableName = ((ILockable)args.Persister).RootTableName.ToLower();
    

    You could also get it from the session...

    ((ILockable)session.GetSessionImplementation()
                       .GetEntityPersister(null, new Pony())).RootTableName