Gracias José por la pronta respuesta. Si, definitivamente va después del atributo "id", jamás lo hubiese encontrado al error, jejeje. Estuve leyendo el pdf nhibernate_reference.pdf pero no encontré que diga nada acerca de eso. Te cuento que estoy realizando las pruebas en Monodevelop, y coloqué los xsd en el lugar correspondiente para tener intellisense pero me deja colocar el atributo "version" en cualquier posición. Lo voy a probar en VS para ver si es un error de Monodevelop ó del xsd.
Saludos. El 1 de marzo de 2011 15:41, José F. Romaniello <[email protected]>escribió: > Bruno, creo que el atributo "version" va inmediatamente despues del ID. > Te recomiendo poner los XSD que estan en el zip de nhibernate en la > carpeta: > C:\Program Files (x86)\Microsoft Visual Studio 10.0\Xml\Schemas > > para tener intellisense en los archivos xml, y darte cuenta más rapido de > los errores. > hay otros que usan otra técnica que es poner los xsd en la carpeta de > librerías de tu solución y apuntar los xmls ahí... pero a mi me parece mas > simple lo que te dije antes :) > > 2011/3/1 Bruno Reato <[email protected]> > >> Hola a todos, estoy intentando mapear una entidad sencilla y agregarle el >> control de concurrencia a través de un campo DateTime, la clase tiene esta >> estructura: >> >> // AbstractEntity.cs >> namespace ModelNH >> { >> public class AbstractEntity<TId> >> { >> public virtual TId Id { get; protected set; } >> public override bool Equals(object obj) >> { >> return Equals(obj as AbstractEntity<TId>); >> } >> >> private static bool IsTransient(AbstractEntity<TId> obj) >> { >> return obj != null && Equals(obj.Id, default(TId)); >> } >> >> private Type GetUnproxiedType() >> { >> return GetType(); >> } >> public virtual bool Equals(AbstractEntity<TId> other) >> { >> if (other == null) >> return false; >> if (ReferenceEquals(this, other)) >> return true; >> if (!IsTransient(this) && !IsTransient(other) && Equals(Id, other.Id)) >> { >> var otherType = other.GetUnproxiedType(); >> var thisType = GetUnproxiedType(); >> return thisType.IsAssignableFrom(otherType) || >> otherType.IsAssignableFrom(thisType); >> } >> return false; >> } >> public override int GetHashCode() >> { >> if (Equals(Id, default(TId))) >> return base.GetHashCode(); >> return Id.GetHashCode(); >> } >> } >> } >> >> >> // Entity.cs >> namespace ModelNH >> { >> public class Entity: AbstractEntity<int> >> { >> public Entity(){} >> } >> } >> >> // TestEntity.cs >> namespace ModelNH >> { >> public class TestEntity: Entity >> { >> public virtual String Name { get; set; } >> public virtual DateTime LastUpdated { get; set; } >> } >> } >> >> y el archivo de mapeo: >> <!-- mappings/TestEntity.hbm.xml --> >> <?xml version="1.0"?> >> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="ModelNH" >> namespace="ModelNH"> >> <class name="TestEntity" table="TEST"> >> <id name="Id" column="TEST_ID" type="int"> >> <generator class="sequence"> >> <param name="sequence">GEN_TEST_ID</param> >> </generator> >> </id> >> <property name="Name" column="NAME" type="String" /> >> <version name="LastUpdated" column="LAST_UPDATED" type="timestamp" /> >> </class> >> </hibernate-mapping> >> >> Y el programa de consola: >> >> //Program.cs >> >> using System; >> using NHibernate; >> using NHibernate.Cfg; >> using System.Data; >> using ModelNH; >> using System.IO; >> using NHibernate.Linq; >> >> namespace PruebaNHibernate >> { >> class Program >> { >> private static ISessionFactory factory; >> private static ISession sess; >> public static void Main(string[] args) >> { >> try{ >> Configuration cfg = new Configuration().Configure(); >> cfg.AddDirectory(new DirectoryInfo(@".\mappings")); >> factory = cfg.BuildSessionFactory(); >> using(sess = factory.OpenSession()){ >> var tests = sess.Query<TestEntity>(); >> tests.ForEach(t => Console.WriteLine(t.Name)); >> } >> }catch(Exception e){ >> Console.WriteLine(e.Message); >> } >> Console.Write("Press any key to continue . . . "); >> Console.ReadKey(true); >> } >> } >> } >> >> Estoy utilizando NHibernate 3.0.0.4000 y me conecto a una DB Firebird >> (aunque no creo que ésto último influye en el error). Cuando ejecuto el >> programa obtengo la excepción: >> >> G:\Projects\ModelNH\PruebaNHibernate\bin\Debug\mappings\TestEntity.hbm.xml(10,4): >> XML validation error: El elemento 'class' en espacio de nombres >> 'urn:nhibernate-mapping-2.2' tiene un elemento secundario 'version' en >> espacio de nombres 'urn:nhibernate-mapping-2.2' no válido. Lista esperada de >> elementos posibles: 'property, many-to-one, one-to-one, component, >> dynamic-component, properties, any, map, set, list, bag, idbag, array, >> primitive-array, join, subclass, joined-subclass, union-subclass, loader, >> sql-insert, sql-update, sql-delete, filter, resultset, query, sql-query' en >> espacio de nombres 'urn:nhibernate-mapping-2.2'. >> >> Press any key to continue . . . >> >> Saludos. >> >> Bruno. >> >> -- >> Para escribir al Grupo, hágalo a esta dirección: >> [email protected] >> Para más, visite: http://groups.google.com/group/NHibernate-Hispano > > > -- > Para escribir al Grupo, hágalo a esta dirección: > [email protected] > Para más, visite: http://groups.google.com/group/NHibernate-Hispano -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
