2009-10-05 18 views
5

Trong ứng dụng hiện tại tôi đang phát triển tôi đang sử dụng Fluent NHibernate để cấu hình NHibernate để sử dụng như một ORM. Tôi muốn có thể thêm tiền tố vào tất cả các tên bảng được sử dụng trong ứng dụng, để nếu tôi sử dụng cơ sở dữ liệu đã phục vụ một ứng dụng khác, không có xung đột đặt tên giữa hai ứng dụng. Ví dụ:Làm cách nào để cấu hình NHibernate (hoặc Fluent NHib) để thêm tiền tố tên bảng vào tất cả các tên bảng?

Ví dụ: nếu tôi muốn thêm tiền tố Portal_ vào mỗi bảng, bảng Users sẽ trở thành Portal_Users.

Tất nhiên, tôi biết cách định cấu hình mỗi tên bảng trong mỗi tệp ánh xạ, nhưng đó không thực sự là giải pháp tốt cho những gì tôi đang cố gắng làm. Nếu tôi muốn thay đổi tiền tố, tôi sẽ buộc phải thay đổi từng tệp ánh xạ. Tôi muốn có thể thêm (hoặc thay đổi) tiền tố cho tất cả các tên bảng ở một nơi duy nhất trong mã hoặc cấu hình của tôi.

Làm cách nào để thêm tiền tố vào tất cả các tên bảng trong ứng dụng bằng NHibernate (hoặc Fluent NHibernate)?

Trả lời

2

Đối với việc thực hiện thành thạo ..

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

Cảm ơn, đó là những gì tôi cần –

3

Bạn có thể thực hiện riêng INamingStrategy của bạn và xác định nó cho cấu hình của bạn:

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

Cảm ơn câu trả lời! –

+0

Chính xác những gì tôi đang tìm kiếm, và đến nay là cách dễ nhất để đạt được nó! – Sean

Các vấn đề liên quan