2009-03-03 10 views
23

kullanarak tablo dizinleri oluşturma Fluent NHibernate ile veritabanı şeması geri kalanıyla birlikte tablo indeksleri oluşturmak mümkün mü? Otomatik bir oluşturma işlemi ile eksiksiz bir veritabanı DDL'si oluşturabilmek istiyorum.Fluent NHibernate

cevap

44

Akıcı NHibernate daha yeni sürümlerinde, yerine (artık yok) SetAttribute kullanmaktan daha bunu Index() yöntemini çağırabilirsiniz:

Map(x => x.Prop1).Index("idx__Prop1"); 
+0

Doğru, API değişti ve bu şimdi dizinleri ayarlamak için doğru yol olarak kabul edilir. Bu değişikliği yanıtlamak için bu soruya verilen cevabı güncelledim. Teşekkür ederim. –

15

Sütunlarda dizin var mı?

.SetAttribute("index", "nameOfMyIndex") dosyalarını ekleyerek, ClassMap<...> dosyalarında el ile yapabilirsiniz. şöyle:

Map(c => c.FirstName).SetAttribute("index", "idx__firstname"); 

veya automapper öznitelik özelliklerini kullanarak bunu yapabilirsiniz - örneğin şöyle: ısrarcılığınız modelini yaratmış sonra

: o zaman

{ 
    var model = new AutoPersistenceModel 
    { 
     (...) 
    } 

    model.Conventions.ForAttribute<IndexedAttribute>(ApplyIndex); 
} 


void ApplyIndex(IndexedAttribute attr, IProperty info) 
{ 
    info.SetAttribute("index", "idx__" + info.Property.Name"); 
} 

ve kuruluşlara bunu:

[Indexed] 
public virtual string FirstName { get; set; } 

Ben ikinci severim. Etki alanı modelinize öğretici olmamakla birlikte, neler olup bittiği konusunda hala çok etkili ve açık olmak arasında iyi bir uzlaşmadır.

+0

aradığım buydu O. Teşekkür ederim. –

10

Mookid'in cevabı harika ve bana çok yardımcı oldu, ancak bu arada sürekli gelişen Fluent NHibernate API'si değişti.

public class IndexedPropertyConvention : AttributePropertyConvention<IndexedAttribute> 
{ 
    protected override void Apply(IndexedAttribute attribute, IProperty target) 
    { 
     target.SetAttribute("index", "idx__" + target.Property.Name); 
    } 
} 

[Endeksli] özelliğinin artık aynı şekilde: IndexedPropertyConvention şudur

//... 
model.ConventionDiscovery.Setup(s => 
      { 
       s.Add<IndexedPropertyConvention>(); 
       //other conventions to add... 
      }); 

:

Yani, şimdi mookid örnek yazmak için doğru yolu şudur.