Aquí podría ser tu PUBLICIDAD


Mapeo de árbol ordenado doblemente conectado utilizando NHibernate

votos
2

Necesitamos asignar clases simples usando NHibernate:

public class CatalogItem
{
    private IList<CatalogItem> children = new List<CatalogItem>();

    public Guid Id { get; set; }
    public string Name { get; set; }
    public CatalogItem Parent { get; set; }
    public IList<CatalogItem> Children
    {
        get { return children; }
    }        
    public bool IsRoot { get { return Parent == null; } }        
    public bool IsLeaf { get { return Children.Count == 0; } }
}

Hay un montón de tutoriales en Internet sobre este tema, pero ninguno de ellos cubre pequeños detalles desagradables: necesitamos un orden para preservarlo en la colección Children. Hemos intentado seguir el mapeo, pero esto generó extrañas exageraciones arrojadas por NHibernate (El método no estático requiere un objetivo).

<?xml version=1.0 encoding=utf-8 ?>
<hibernate-mapping xmlns=urn:nhibernate-mapping-2.2 namespace=Domain.Model assembly=Domain>
    <class name=CatalogItem  lazy=false>
        <id name=Id type=guid>
            <generator class=guid />
        </id>
        <property name=Name />

        <many-to-one name=Parent class=CatalogItem lazy=false />

        <list name=Children cascade=all>
            <key property-ref=Parent/>
            <index column=weight type=Int32 />
            <one-to-many not-found=exception class=CatalogItem/>
        </list>        
    </class>
</hibernate-mapping>

Alguien tiene alguna opinión?

Publicado el 12/03/2009 a las 21:31
fuente por usuario Artem Tikhomirov
En otros idiomas...        العربية       

1 respuestas

votos
0

No soy un experto, pero me <key property-ref=...>parece extraño en este uso. Debería poder hacer <key column="ParentID"/>, y NHibernate automáticamente usará la clave primaria de la clase asociada, en este caso.

Es posible que también deba configurar la lista inverse="true", ya que la relación es bidireccional. [Ver la sección 6.8 en los documentos.]

Respondida el 17/03/2009 a las 04:27
fuente por usuario Dan Fitch


Aquí podría ser tu PUBLICIDAD