visual tutorial studio net framework example español descargar asp c# nhibernate fluent-nhibernate nhibernate-mapping mapping

c# - tutorial - nhibernate visual studio 2017



¿Cómo utilizo Fluent NHibernate para mapear una jerarquía de carpetas autorreferencial? (1)

Creo que tendrá que especificar las columnas en sus reemplazos de mapeo.

mapping.HasMany(x => x.SubFolders).KeyColumn("ParentFolder_id");

Tengo una jerarquía de carpetas representada por la siguiente clase:

public class Folder { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual Folder ParentFolder { get; set; } public virtual ICollection<Folder> SubFolders { get; set; } }

En otras palabras, cada Folder puede pertenecer a una ParentFolder , así como también tener SubFolders debajo de ella. Estoy usando Automapper NHibernate''s Automapper y generando automáticamente el esquema de la base de datos usando SchemaExport . Obtengo la siguiente tabla cuando intento guardar algunas carpetas de prueba:

Id | Name | ParentFolder_id | Folder_id ---------------------------------------------------------------- 1 | Root Folder (has children) | NULL | NULL 2 | Root Folder (no children) | NULL | NULL 3 | Sub Folder | 1 | NULL 4 | Sub Sub Folder | 2 | NULL

Hasta ahora, la columna ParentFolder_id se está configurando correctamente, aunque no sé por qué creó otra columna Folder_id . Ahora, cuando intento ejecutar el siguiente código:

using (var session = SessionFactory.OpenSession()) { // I''m using NHibernate 3 var rootFolder = session.Query<Folder>() .Where(x => x.Name.StartsWith("root").First(); Console.WriteLine(rootFolder.SubFolders.Count()); }

El recuento devuelto es 0 y se ejecuta el siguiente SQL:

SELECT count(Id) FROM [Folder] WHERE Folder_id = 1

Esta declaración de SQL es incorrecta. Debería estar haciendo:

SELECT count(Id) FROM [Folder] WHERE ParentFolder_id = 1

¿Alguien puede decirme por qué Folder_id NHibernate está creando la columna Folder_id adicional y consultando sobre ella, y cómo puedo solucionarlo para que ParentFolder_id correctamente la columna ParentFolder_id ? Probé la siguiente anulación sin suerte:

public class FolderOverride : IAutoMappingOverride<Folder> { public void Override(AutoMapping<Folder> mapping) { mapping.HasMany(x => x.SubFolders).Inverse(); // I thought inverse might fix it, but no dice mapping.References(x => x.ParentFolder); } }