代码之家  ›  专栏  ›  技术社区  ›  Mark Rogers

如何配置nhibernate(或fluent nhib)以向所有表名添加表名前缀?

  •  5
  • Mark Rogers  · 技术社区  · 15 年前

    在我正在开发的当前应用程序中,我使用Fluent nhibernate配置nhibernate用作ORM。我希望能够为应用程序中使用的所有表名添加前缀,这样,如果我使用的数据库已经在为另一个应用程序提供服务,那么这两个应用程序之间就没有命名冲突。

    例如,如果我想添加一个前缀 Portal_ 对于每一张桌子, Users 桌子会变成 Portal_Users .

    当然,我知道如何在每个映射文件中配置每个表名,但这并不是一个很好的解决方案。如果我想更改前缀,就必须更改每个映射文件。我希望能够在代码或配置中的一个位置向所有表名添加(或更改)前缀。

    如何使用nhibernate(或fluent nhibernate)为应用程序中的所有表名添加前缀?

    2 回复  |  直到 7 年前
        1
  •  2
  •   dove    15 年前

    为了流畅的实现..

     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));
                    }
                }
    
        2
  •  3
  •   ChssPly76    15 年前

    你可以实现你自己的 INamingStrategy 并为您的配置指定它:

    Configuration config = new Configuration();
    config.SetNamingStrategy(new MyTablePrefixStrategy());