views:

325

answers:

2

In the current application I'm developing I'm using fluent nhibernate to configure nhibernate for use as an ORM. I want to be able to add a prefix to all the table names used in the application, so that if I use a database that is already servicing another application, there are no naming conflicts between the two applications.

So for instance if I wanted to add a prefix of Portal_ to each table, the Users table would become Portal_Users.

Of course, I know how to configure each table name in each mapping file, but that's not really a good solution for what I'm trying to do. If I ever wanted to change the prefix, I would be forced to change each of the mapping files. I want to be able to add (or change) the prefix to all the table names in a single place in my code or configuration.

Can someone tell me how to add a prefix to all table names within an application using nhibernate (or fluent nhibernate)?

Thanks, have a good day.

+1  A: 

You can implement your own INamingStrategy and specify it for your Configuration:

Configuration config = new Configuration();
config.SetNamingStrategy(new MyTablePrefixStrategy());
ChssPly76
Thanks for the answer!
Mark Rogers
+2  A: 

For a fluent implementation..

 public class AutoPersistenceModelGenerator : IAutoPersistenceModelGenerator
    {
        public AutoPersistenceModel Generate()
        {
            var mappings = new AutoPersistenceModel();
            mappings.AddEntityAssembly(typeof(User).Assembly).Where(GetAutoMappingFilter);
            mappings.Conventions.Setup(GetConventions());

.....
    private Action<IConventionFinder> GetConventions()
    {
        return c =>
        {
            c.Add<PrimaryKeyConvention>();
            c.Add<ReferenceConvention>();
            c.Add<HasManyConvention>();
            c.Add<TableNameConvention>();

......

       public class TableNameConvention : IClassConvention
        {
            public void Apply(FluentNHibernate.Conventions.Instances.IClassInstance 
instance)
            {
                instance.Table(Inflector.Net.Inflector.Pluralize("Portal_" + 
    instance.EntityType.Name));
                }
            }
dove
Thanks, that's what I needed
Mark Rogers