El archivo de configuración es el siguiente:
Código:
El mappeo Usuario.hbm.xml es: <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> <reflection-optimizer use="false" /> <session-factory> <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property> <property name="dialect">NHibernate.Dialect.GenericDialect</property> <property name="connection.driver_class">NHibernate.Driver.OleDbDriver</property> <property name="connection.connection_string">Provider=VFPOLEDB;Data Source="C:\db_fox";Collating Sequence=general;Exclusive=false;Nulls=false</property> <property name="show_sql">false</property> <mapping assembly="Business.Entity" /> </session-factory> </hibernate-configuration>
Código:
Y la entidad es: <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Business.Entity" assembly="Business.Entity"> <class name="Usuario" table="usuarios"> <id name="id" column="id" type="int"> <generator class="identity"/> </id> <property name="User" column="user" not-null="true" type="string"> </property> </class> </hibernate-mapping>
Código:
Ahora cuando quiero ejecutar recuperar todos los registros de la tabla namespace Business.Entity { public class Usuario { private int _id; public virtual int id { get { return _id; } set { _id = value; } } private string _User; public virtual string User { get { return _User; } set { _User = value; } } } }
usuarios ejecuto lo siguiente:
Código:
De esta manera funciona, pero si quiere traer un dato en particular ya ISessionFactory sessionFactory = new Configuration().Configure().BuildSessionFactory(); ISession session = sessionFactory.OpenSession(); var usuarios = session.CreateQuery("from Usuario").List<Usuario>(); session.Close();
sea por id o por user (de la siguiente manera):
I
Código:
SessionFactory sessionFactory = new Configuration().Configure().BuildSessionFactory(); ISession session = sessionFactory.OpenSession(); IQuery query = session.CreateQuery("from Usuario where user = :user"); query.SetParameter("user", "xAnubiSx"); Usuario usuario = query.UniqueResult<Usuario>(); <- se produce la excepción session.Close();
la excepción que se produce es la siguiente:
Código:
y el trace: could not execute query [ select usuario0_.id as id0_, usuario0_.user as user0_ from usuarios usuario0_ where user=? ] Name:user - Value:xAnubiSx [SQL: select usuario0_.id as id0_, usuario0_.user as user0_ from usuarios usuario0_ where user=?]
Código:
No pude encontrar cual es el problema, ya que en MySql y MsSql en NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters) en NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor session, QueryParameters queryParameters) en NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes) en NHibernate.Hql.Ast.ANTLR.Loader.QueryLoader.List(ISessionImplementor session, QueryParameters queryParameters) en NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.List(ISessionImplementor session, QueryParameters queryParameters) en NHibernate.Engine.Query.HQLQueryPlan.PerformList(QueryParameters queryParameters, ISessionImplementor session, IList results) en NHibernate.Impl.SessionImpl.List(String query, QueryParameters queryParameters, IList results) en NHibernate.Impl.SessionImpl.List(String query, QueryParameters parameters) en NHibernate.Impl.QueryImpl.List() en NHibernate.Impl.AbstractQueryImpl.UniqueResult() en NHibernate.Impl.AbstractQueryImpl.UniqueResult[T]() en Business.Data.UsuarioAdapter.GetUsuario() en C:\Documents and Settings\Usuario\Mis documentos\Visual Studio 2005\Projects\NHibernateExample\Business.Data\UsuarioAdapter.cs:línea 24 en Business.Logic.Usuarios.GetUsuario() en C:\Documents and Settings\Usuario\Mis documentos\Visual Studio 2005\Projects\NHibernateExample\Business.Logic\Usuarios.cs:línea 15 en NHibernateExample.Program.Main(String[] args) en C:\Documents and Settings\Usuario\Mis documentos\Visual Studio 2005\Projects\NHibernateExample\NHibernateExample\Program.cs:línea 15 en System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) en System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) en Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() en System.Threading.ThreadHelper.ThreadStart_Context(Object state) en System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) en System.Threading.ThreadHelper.ThreadStart()
funcionan correctamente.
Saludos