Estoy haciendo una prueba para trabajar desde c# .net con bases de datos de foxpro 9 utilizando NHibernate.
El archivo de configuración es el siguiente:
Código:
<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>
El mappeo Usuario.hbm.xml es:
Código:
<?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>
Y la entidad es:
Código:
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; }
}
}
}
Ahora cuando quiero ejecutar recuperar todos los registros de la tabla
usuarios ejecuto lo siguiente:
Código:
ISessionFactory sessionFactory = new
Configuration().Configure().BuildSessionFactory();
ISession session = sessionFactory.OpenSession();
var usuarios = session.CreateQuery("from Usuario").List<Usuario>();
session.Close();
De esta manera funciona, pero si quiere traer un dato en particular ya
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:
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=?]
y el trace:
Código:
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()
No pude encontrar cual es el problema, ya que en MySql y MsSql
funcionan correctamente.
Saludos