Search code examples
nhibernatefluent-nhibernate

Prefix string to ALL generated table names - FluentNHibernate


Is there a simple way to prefix all generated table names with a string?

The convention

Table.Is(x => "Prefix" + x.EntityType.Name)

only works for Entity tables (doesn't function for join or subclass tables)

I can't seem to find a simple way to have every single table that nhibernate creates be prefixed with a specific string without first identifying all the cases that would create a table and specifying a rule per case. Ew!


Solution

  • for this you have to implement IHasManyToManyConvention and IJoinedSubclassConvention see

    public class SubclassConvention : IJoinedSubclassConvention, IHasManyToManyConvention
    {
        public void Apply(IJoinedSubclassInstance instance)
        {
            instance.Table("Prefix" + instance.Type.Name);
        }
    
        public void Apply(IManyToManyCollectionInstance instance)
        {
            instance.Table("Prefix" + instance.TableName);
        }
    }