2009-10-05 64 views
5

在我正在開發的當前應用程序中,我使用Fluent NHibernate將NHibernate配置爲用作ORM。我希望能夠爲應用程序中使用的所有表名添加前綴,以便如果我使用已經爲另一個應用程序提供服務的數據庫,則兩個應用程序之間不存在命名衝突。如何配置NHibernate(或Fluent NHib)爲所有表名添加表名前綴?

因此,例如,如果我想爲每個表添加前綴Portal_,則Users表將變爲Portal_Users

當然,我知道如何在每個映射文件中配置每個表名,但這不是我想要做的很好的解決方案。如果我想更改前綴,我將被迫更改每個映射文件。我希望能夠在我的代碼或配置中的單個位置添加(或更改)前綴到所有表名。

如何使用NHibernate(或Fluent NHibernate)爲應用程序中的所有表名添加前綴?

回答

2

對於流利實現..

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)); 
       } 
      } 
+0

謝謝,這就是我所需要的 – 2009-10-05 16:07:38

3

您可以實現自己的INamingStrategy並將其指定爲您的配置:

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

感謝你的回答! – 2009-10-05 16:08:29

+0

正是我在找的東西,到目前爲止最簡單的方法來實現它! – Sean 2015-09-22 10:04:53