Hello guyz,

I'm getting an error when I try to get an object from a criteria in
NHibernate, I don't know what it can be since I can get it from the
session.Get<T>() method, but when I try to use a criteria I get an
error about the Guid format, I really need some help, please.

My hibernate.cfg.xml:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property
name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</
property>
    <property
name="connection.provider">NHibernate.Connection.DriverConnectionProvider</
property>
    <property name="dialect">NHibernate.Dialect.MySQLDialect</
property>
    <property
name="connection.connection_string">Server=Athenas;Database=uniflu;Uid=alaor;Pwd=test;</
property>
    <property
name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory,
NHibernate.ByteCode.Castle</property>
    <property name="show_sql">true</property>
  </session-factory>
</hibernate-configuration>

My Usuario.cs class:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Uniflu.Domain
{
    public class Usuario
    {
        public virtual Guid Id { get; set; }
        public virtual String Nome { get; set; }
        public virtual String Email { get; set; }
        public virtual String Senha { get; set; }
        public virtual String Dica { get; set; }
        public virtual DateTime DataCriado { get; set; }
        public virtual DateTime UltimoAcesso { get; set; }
        public virtual Boolean Ativo { get; set; }
    }
}

My Usuario.hbm.xml:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="Uniflu.Domain"
                   namespace="Uniflu.Domain">
  <class name="Usuario">
    <id name="Id">
      <generator class="guid" />
    </id>
    <property name="Nome" />
    <property name="Email" />
    <property name="Senha" />
    <property name="Dica" />
    <property name="DataCriado" />
    <property name="UltimoAcesso" />
    <property name="Ativo" />
  </class>
</hibernate-mapping>

My NHibernateHelper:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate;
using NHibernate.Cfg;

namespace Uniflu.Domain
{
    class NHibernateHelper
    {
        private static ISessionFactory _sessionFactory;

        private static ISessionFactory SessionFactory
        {
            get
            {
                if (_sessionFactory == null)
                {
                    var configuration = new Configuration();
                    configuration.Configure();
                    configuration.AddAssembly(typeof
(Usuario).Assembly);
                    _sessionFactory = configuration.BuildSessionFactory
();
                }
                return _sessionFactory;
            }
        }

        public static ISession OpenSession()
        {
            return SessionFactory.OpenSession();
        }
    }
}

My Usuario Repository:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate;
using NHibernate.Criterion;

namespace Uniflu.Domain.Repositories
{
    public class UsuarioRepository : IUsuarioRepository
    {
        public void Inserir(Usuario usuario)
        {
            using (ISession session = NHibernateHelper.OpenSession())
            {
                using (ITransaction transaction =
session.BeginTransaction())
                {
                    session.Save(usuario);
                    transaction.Commit();
                }
            }
        }

        public void Atualizar(Usuario usuario)
        {
            using (ISession session = NHibernateHelper.OpenSession())
            {
                using (ITransaction transaction =
session.BeginTransaction())
                {
                    session.Update(usuario);
                    transaction.Commit();
                }
            }
        }

        public void Remover(Usuario usuario)
        {
            using (ISession session = NHibernateHelper.OpenSession())
            {
                using (ITransaction transaction =
session.BeginTransaction())
                {
                    session.Delete(usuario);
                    transaction.Commit();
                }
            }
        }

        public Usuario SelecionarPorId(Guid Id)
        {
            using (ISession session = NHibernateHelper.OpenSession())
            {
                return session.Get<Usuario>(Id);
            }
        }

        public Usuario SelecionarPorNome(String Nome)
        {
            using (ISession session = NHibernateHelper.OpenSession())
            {
                return session.CreateCriteria(typeof(Usuario))
                            .Add(Restrictions.Eq("Nome", Nome))
                            .UniqueResult<Usuario>();
            }
        }

        public ICollection<Usuario> BuscarPorNome(String Nome)
        {
            throw new NotImplementedException();
        }
    }
}


My tests:

using System;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Tool.hbm2ddl;
using NUnit.Framework;
using Uniflu.Domain;
using Uniflu.Domain.Repositories;

[TestFixture]
public class ProductRepository_Fixture
{
    private ISessionFactory _sessionFactory;
    private Configuration _configuration;

    [TestFixtureSetUp]
    public void TestFixtureSetUp()
    {
        _configuration = new Configuration();
        _configuration.Configure();
        _configuration.AddAssembly(typeof(Usuario).Assembly);
        _sessionFactory = _configuration.BuildSessionFactory();
    }

    [SetUp]
    public void SetupContext()
    {
        new SchemaExport(_configuration).Execute(false, true, false);

        using (ISession session = _sessionFactory.OpenSession())
        {
            using(ITransaction transaction = session.BeginTransaction
())
            {
                foreach(Usuario usuario in usuarios)
                    session.Save(usuario);

                transaction.Commit();
            }
        }
    }

    public readonly Usuario[] usuarios = new[] {
            new Usuario { Nome = "Alaor", Email =
"[email protected]" },
            new Usuario { Nome = "Diego", Email = "[email protected]" },
            new Usuario { Nome = "Estela", Email =
"[email protected]" },
            new Usuario { Nome = "Paulo Diogo", Email =
"[email protected]" }
    };

    [Test]
    public void Can_add_new_usuario()
    {
        var usuario = new Usuario { Nome = "Alaor", Email =
"[email protected]" };
        IUsuarioRepository repository = new UsuarioRepository();
        repository.Inserir(usuario);

        using (ISession session = _sessionFactory.OpenSession())
        {
            var fromDB = session.Get<Usuario>(usuario.Id);

            Assert.IsNotNull(fromDB);
            Assert.AreNotSame(usuario, fromDB);
            Assert.AreEqual(usuario.Nome, fromDB.Nome);
            Assert.AreEqual(usuario.Email, fromDB.Email);
        }

        Console.WriteLine(usuario.Id.ToString());
    }

    [Test]
    public void Can_update_existing_usuario()
    {
        var usuario = usuarios[0];

        usuario.Nome = "Alaorzinho";

        IUsuarioRepository repository = new UsuarioRepository();
        repository.Atualizar(usuario);

        // Usa session para tentar recuperar o usuário
        using (ISession session = _sessionFactory.OpenSession())
        {
            var fromDb = session.Get<Usuario>(usuario.Id);
            Assert.AreEqual(usuario.Nome, fromDb.Nome);
        }
    }

    [Test]
    public void Can_remove_existing_usuario()
    {
        var usuario = usuarios[0];

        IUsuarioRepository repository = new UsuarioRepository();
        repository.Remover(usuario);

        using (ISession session = _sessionFactory.OpenSession())
        {
            var fromDb = session.Get<Usuario>(usuario.Id);

            Assert.IsNull(fromDb);
        }
    }

    [Test]
    public void Can_get_existing_usuario_by_Id()
    {
        var usuario = usuarios[0];

        IUsuarioRepository repository = new UsuarioRepository();

        var fromDb = repository.SelecionarPorId(usuario.Id);

        Assert.IsNotNull(fromDb);
        Assert.AreEqual(usuario.Nome, fromDb.Nome);
        Assert.AreEqual(usuario.Email, fromDb.Email);
    }

    [Test]
    public void Can_get_existing_usuario_by_Nome()
    {
        var usuario = usuarios[2];

        IUsuarioRepository repository = new UsuarioRepository();

        var fromDb = repository.SelecionarPorNome(usuario.Nome);

        Assert.IsNotNull(fromDb);
        Assert.AreEqual(usuario.Nome, fromDb.Nome);
        Assert.AreEqual(usuario.Email, fromDb.Email);
    }
}

The last test fails, all the others passes, in the last test I get
this error message:

------ Test started: Assembly: Uniflu.Tests.dll ------

NHibernate: INSERT INTO Usuario (Nome, Email, Senha, Dica, DataCriado,
UltimoAcesso, Ativo, Id) VALUES (?p0, ?p1, ?p2, ?p3, ?p4, ?p5, ?p6, ?
p7);?p0 = 'Alaor', ?p1 = '[email protected]', ?p2 = NULL, ?p3 = NULL, ?
p4 = 01/01/0001 00:00:00, ?p5 = 01/01/0001 00:00:00, ?p6 = False, ?p7
= 182a87f6-450d-4e02-94e3-b9c07fab1fa1
NHibernate: INSERT INTO Usuario (Nome, Email, Senha, Dica, DataCriado,
UltimoAcesso, Ativo, Id) VALUES (?p0, ?p1, ?p2, ?p3, ?p4, ?p5, ?p6, ?
p7);?p0 = 'Diego', ?p1 = '[email protected]', ?p2 = NULL, ?p3 = NULL, ?p4 =
01/01/0001 00:00:00, ?p5 = 01/01/0001 00:00:00, ?p6 = False, ?p7 =
c28dc40a-ab18-4b02-9a71-708fe6094881
NHibernate: INSERT INTO Usuario (Nome, Email, Senha, Dica, DataCriado,
UltimoAcesso, Ativo, Id) VALUES (?p0, ?p1, ?p2, ?p3, ?p4, ?p5, ?p6, ?
p7);?p0 = 'Estela', ?p1 = '[email protected]', ?p2 = NULL, ?p3
= NULL, ?p4 = 01/01/0001 00:00:00, ?p5 = 01/01/0001 00:00:00, ?p6 =
False, ?p7 = 15771ad7-951b-4c78-a8d0-9a4f3b450562
NHibernate: INSERT INTO Usuario (Nome, Email, Senha, Dica, DataCriado,
UltimoAcesso, Ativo, Id) VALUES (?p0, ?p1, ?p2, ?p3, ?p4, ?p5, ?p6, ?
p7);?p0 = 'Paulo Diogo', ?p1 = '[email protected]', ?p2 = NULL, ?
p3 = NULL, ?p4 = 01/01/0001 00:00:00, ?p5 = 01/01/0001 00:00:00, ?p6 =
False, ?p7 = 309ba2b3-bbc0-4244-a5cd-7fa837cf037d
NHibernate: SELECT this_.Id as Id2_0_, this_.Nome as Nome2_0_,
this_.Email as Email2_0_, this_.Senha as Senha2_0_, this_.Dica as
Dica2_0_, this_.DataCriado as DataCriado2_0_, this_.UltimoAcesso as
UltimoAc7_2_0_, this_.Ativo as Ativo2_0_ FROM Usuario this_ WHERE
this_.Nome = ?p0;?p0 = 'Estela'
TestCase 'ProductRepository_Fixture.Can_get_existing_usuario_by_Nome'
failed: NHibernate.ADOException : could not execute query
[ SELECT this_.Id as Id2_0_, this_.Nome as Nome2_0_, this_.Email as
Email2_0_, this_.Senha as Senha2_0_, this_.Dica as Dica2_0_,
this_.DataCriado as DataCriado2_0_, this_.UltimoAcesso as
UltimoAc7_2_0_, this_.Ativo as Ativo2_0_ FROM Usuario this_ WHERE
this_.Nome = ?p0 ]
Positional parameters:  #0>Estela
[SQL: SELECT this_.Id as Id2_0_, this_.Nome as Nome2_0_, this_.Email
as Email2_0_, this_.Senha as Senha2_0_, this_.Dica as Dica2_0_,
this_.DataCriado as DataCriado2_0_, this_.UltimoAcesso as
UltimoAc7_2_0_, this_.Ativo as Ativo2_0_ FROM Usuario this_ WHERE
this_.Nome = ?p0]
  ----> System.FormatException : GUID deve conter 32 dígitos com 4
hifens (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
        em NHibernate.Loader.Loader.DoList(ISessionImplementor session,
QueryParameters queryParameters)
        em NHibernate.Loader.Loader.List(ISessionImplementor session,
QueryParameters queryParameters, ISet`1 querySpaces, IType[]
resultTypes)
        em NHibernate.Impl.SessionImpl.List(CriteriaImpl criteria, IList
results)
        em NHibernate.Impl.CriteriaImpl.List(IList results)
        em NHibernate.Impl.CriteriaImpl.UniqueResult()
        em NHibernate.Impl.CriteriaImpl.UniqueResult[T]()
        E:\Projetos\Uniflu\Uniflu\Uniflu.Domain\Repositories
\UsuarioRepository.cs(60,0): em
Uniflu.Domain.Repositories.UsuarioRepository.SelecionarPorNome(String
Nome)
        E:\Projetos\Uniflu\Uniflu\Uniflu.Tests\UsuarioRepository_Fixture.cs
(123,0): em ProductRepository_Fixture.Can_get_existing_usuario_by_Nome
()
        --FormatException
        em System.Guid..ctor(String g)
        em NHibernate.Type.GuidType.Get(IDataReader rs, Int32 index)
        em NHibernate.Type.NullableType.NullSafeGet(IDataReader rs, String
name)
        em NHibernate.Loader.Loader.GetKeyFromResultSet(Int32 i,
IEntityPersister persister, Object id, IDataReader rs,
ISessionImplementor session)
        em NHibernate.Loader.Loader.GetRowFromResultSet(IDataReader
resultSet, ISessionImplementor session, QueryParameters
queryParameters, LockMode[] lockModeArray, EntityKey
optionalObjectKey, IList hydratedObjects, EntityKey[] keys, Boolean
returnProxies)
        em NHibernate.Loader.Loader.DoQuery(ISessionImplementor session,
QueryParameters queryParameters, Boolean returnProxies)
        em NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections
(ISessionImplementor session, QueryParameters queryParameters, Boolean
returnProxies)
        em NHibernate.Loader.Loader.DoList(ISessionImplementor session,
QueryParameters queryParameters)


0 passed, 1 failed, 0 skipped, took 20,68 seconds (NUnit 2.5).

But I can't see what's wrong with the Guid, in the test that takes it
by the Get method it works without any problems with it, so I don't
know. My error trace have some words in portuguese, the trasnlation
is: "Guid should contain 32 digits with 4 dashes", and "em" = "in".

Thankz in advance!
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to