Search code examples
c#nhibernatenhibernate-mapping

NHibernate ClassMap get column name for property


I have ClassMap and entity. In code I would like to get column names for properties in entity. Any Idea?

public class AccountToDepotMap : ClassMap<AccountToDepot>
{
    public AccountToDepotMap()
    {
        Table("COPS_WPA_ACCOUNT_DEPOT");
        Id(t => t.RecId, "REC_ID");
        Map(t => t.RecordDate, "REC_DATE");
        Map(t => t.DepotId, "WPA_DEPOT_ID");
        Map(t => t.AccountId, "WPA_ACCOUNT_ID");
        Map(t => t.IsActive, "ISACTIVE").CustomType<YesNoType>();
    }
}

public class AccountToDepot
{
    public virtual long RecId { get; set; }
    public virtual DateTime RecordDate { get; set; }
    public virtual string DepotId { get; set; }
    public virtual string AccountId { get; set; }
    public virtual bool IsActive { get; set; }
}

I would like to ask on property DepotId and result will be WPA_DEPOT_ID.


Solution

  • There is an deep overview:

    Exploring nhibernate mapping

    And the simple code snippet from here

    How do you get the database column name out of an auditing event listener in NHibernate

    how to get the a persister:

    var entityType = typeof(TEntity);
    var factory = ... // Get your ISessionFactory
    var persister = factory.GetClassMetadata(entityType) as AbstractEntityPersister;
    

    which can be later iterated

    // the set of Properties
    var propertyNameList = persister.PropertyNames;
    
    // here we get all the settings for remaining mapped properties
    foreach (var propertyName in propertyNameList)
    {
        ...