2009-03-03 19 views

Respuesta

44

En versiones más recientes de Fluido NHibernate, puede llamar al método Index() hacer esto en lugar de utilizar SetAttribute (que ya no existe):

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

Correcto, la API ha cambiado y ahora se considera la forma correcta de establecer índices. He actualizado la respuesta a esta pregunta para reflejar este cambio. Gracias. –

15

¿Se refiere a los índices en las columnas?

Puede hacerlo manualmente en sus archivos ClassMap<...> al agregar .SetAttribute("index", "nameOfMyIndex"), p. Ej. de esta manera:

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

o puede hacerlo utilizando las funciones de atributo del Automapper - p. de este modo:

Después de haber creado su modelo de persistencia:

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

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


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

y luego hacer esto a sus entidades:

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

Me gusta este último. Es un buen compromiso entre no ser instrusivo con su modelo de dominio, y sin embargo ser muy efectivo y claro sobre lo que está sucediendo.

+0

eso es exactamente lo que estaba buscando. Gracias. –

10

La respuesta de Mookid es excelente y me ayudó mucho, pero mientras tanto, la siempre cambiante API de Fluiber NHibernate ha cambiado.

Por lo tanto, la manera correcta de escribir muestra mookid ahora es la siguiente:

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

donde IndexedPropertyConvention es la siguiente:

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

El [Indexado] atributo funciona de la misma manera ahora.

Cuestiones relacionadas