2009-10-05 2 views
5

현재 응용 프로그램에서 나는 Fluent NHibernate를 사용하여 ORM으로 사용할 NHibernate를 구성하고 있습니다. 나는 응용 프로그램에서 사용되는 모든 테이블 이름에 접두어를 추가 할 수 있기를 원하므로 이미 다른 응용 프로그램을 서비스하고있는 데이터베이스를 사용하는 경우 두 응용 프로그램간에 이름 충돌이 발생하지 않도록 할 수 있습니다.모든 테이블 이름에 테이블 이름 접두어를 추가하려면 NHibernate (또는 Fluent NHib)를 어떻게 구성합니까?

예를 들어 Portal_이라는 접두사를 각 테이블에 추가하려는 경우 Users 테이블은 Portal_Users이됩니다.

물론, 각 매핑 파일에 각 테이블 이름을 구성하는 방법을 알고 있지만, 실제로 그 작업을 수행하기위한 좋은 해결책은 아닙니다. 접두어를 변경하고 싶다면 각 매핑 파일을 변경해야합니다. 내 코드 또는 구성에서 단일 테이블의 모든 테이블 이름에 접두어를 추가하거나 변경할 수 있기를 원합니다.

NHibernate (또는 Fluent NHibernate)를 사용하는 응용 프로그램 내의 모든 테이블 이름에 접두사를 추가하는 방법은 무엇입니까?

답변

2

 public class TableNameConvention : IClassConvention 
     { 
      public void Apply(FluentNHibernate.Conventions.Instances.IClassInstance 
instance) 
      { 
       instance.Table(Inflector.Net.Inflector.Pluralize("Portal_" + 
    instance.EntityType.Name)); 
       } 
      } 
+0

고마워, 그게 내가 필요한거야. –

3

당신은 당신의 자신의 INamingStrategy을 구현하여 구성을 지정할 수 있습니다 ..

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>(); 

을 ...... 유창하게 구현을 위해

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

답변 해주셔서 감사합니다! –

+0

정확히 내가 무엇을 찾고 있었는지, 그리고 그것을 달성하는 가장 쉬운 방법! – Sean

관련 문제