Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 430297
            [titulo] => Erro ao retornar JSON com WCF e FluentNhibernate
            [dataCadastro] => DateTime Object
                (
                    [date] => 2012-12-04 09:37:05
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 271591
            [status] => A
            [isExample] => 
            [NomeUsuario] => Renato Jose Groffe
            [Apelido] => renato_groffe
            [Foto] => Foto Artigos-2.jpg
            [Conteudo] => Thiago,


Bom dia,

Qual é exatamente a exceção que está sendo retornada?


Renato ) )

Erro ao retornar JSON com WCF e FluentNhibernate

Thiagoporto
   - 03 dez 2012

Quando uso classes com referencia dá um erro e não retorna nada.
#Código

[DataContract]
    public class Cidade
    {
        [DataMember]
        public virtual int Id { get; set; }

        [DataMember]
        public virtual Estado Estados { get; set; }

        [DataMember]
        public virtual string Nome { get; set; }

        [DataMember]
        public virtual int? Codigo_ibge { get; set; }

        [DataMember]
        public virtual int? Codigo_receita_federal { get; set; }

        [DataMember]
        public virtual int? Codigo_estadual { get; set; }

        [DataMember]
        public virtual char Ativo { get; set; }        
    }

[DataContract]
    public class Estado
    {        
        [DataMember]
        public virtual int Id { get; set; }

        [DataMember]
        public virtual string Sigla { get; set; }

        [DataMember]
        public virtual string Nome { get; set; }

        [DataMember]
        public virtual int Codigo_ibge { get; set; }

        [DataMember]
        public virtual char Ativo { get; set; }

        [DataMember]
        public virtual IList<Cidade> Cidade { get; set; }

        public Estado()
        {
            this.Cidade = new List<Cidade>();
        }
    }

public class EstadoMap : ClassMap<Estado>
    {
        public EstadoMap()
        {
            Id(e => e.Id);
            Map(e => e.Sigla);
            Map(e => e.Nome);
            Map(e => e.Codigo_ibge);
            Map(e => e.Ativo);
            HasMany(e => e.Cidade).KeyColumn("id_uf");
            Table("estado");
        }
    }

public class CidadeMap : ClassMap<Cidade>
    {
        public CidadeMap()
        {
            Id(e => e.Id);
            Map(e => e.Nome);
            Map(e => e.Codigo_receita_federal);
            Map(e => e.Codigo_ibge);
            Map(e => e.Codigo_estadual);
            Map(e => e.Ativo);
            References(e => e.Estados).Column("id_uf");
            Table("cidade");
        }
    }

Interface:

[OperationContract]
        [WebGet(UriTemplate = "/RetornarTodasCidades", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        IList<Cidade> RetornarTodasCidades();


public IList<Cidade> RetornarTodasCidades()
        {
            using (ISession session = FluentSessionFactory.AbrirSession())
            {
                try
                {
                    return (from t in session.Query<Cidade>() where t.Ativo.Equals('S') select t).ToList();                     
                }
                catch (Exception ex)
                {                    
                    throw ex; 
                }
            }
        }

Post mais votado

Renato_groffe
|
MVP
    04 dez 2012

Thiago,

Bom dia,

Qual é exatamente a exceção que está sendo retornada?

Renato

Thiagoporto
   - 04 dez 2012

Como executo pelo navegador não consigo visualizar um erro, apenas mostra que não conseguiu carregar a página, se eu comentar os relacionamentos entre as tabelas estado e cidade e sues respectivos mapeamentos funcionar normal, trazendo todas as cidades.

Renato_groffe
|
MVP
    04 dez 2012

Thiago,

Nas ocasiões em que utilizei o Fluent NHibernate, eu não montei classes com relacionamentos.

Mas acredito que o problema esteja acontecendo pelo fato de não existir uma propriedade de nome "id_uf" na sua classe Cidade. É provável que isso esteja ocasionando este problema.

Segue um link que comenta sobre isso:

http://stackoverflow.com/questions/9761154/fluent-nhibernate-mapping-hasmany

Thiagoporto
   - 04 dez 2012

vou testar...

Renato_groffe
|
MVP
    04 dez 2012

Outra sugestão para testar o que realmente acontece seria vc debugar o serviço ou, se isto não for possível, copiar essas classes para uma aplicação de testes e executar elas, de forma a retornar as informações da base de dados.

Thiagoporto
   - 04 dez 2012

Também pensei em trabalhar sem usar essas referências entre as tabelas, mas como não sou experiente no assunto fico preocupado se no futuro pode dar algum problema, e também em relação as consultas que houver relacionamento pode haver algum problema, estou usando LINQ?

Renato_groffe
|
MVP
    04 dez 2012

Thiago,

Normalmente quando desenvolvo Web Services, procuro retornar sempre a menor quantidade de informações possível. A razão disso está em diminuir o tráfego de rede e também devolver os dados em um formato bem simples (sem envolver uma hierarquia classes) de forma a possibilitar que não ocorram problemas quando o serviço for consumido em uma aplicação em outra plataforma (Java, por exemplo).

O mecanismo de acesso a dados que for utilizado não faz tanta diferença. O importante é ter em mente a necessidade de fazer as coisas bem simples e organizadas.

No seu caso, eu criar um método que devolve os estados, além de uma segunda operação que devolve as cidades. Dessa maneira, só realmente quando fosse necessário seriam retornadas informações de cidades ou estados.

Thiagoporto
   - 04 dez 2012

O link passado não funcionou, mas vou usar essa última dica, acho que é melhor sem usar referências de classes e estive lendo alguns artigos a respeito e usa-se mais é para quando é gerado o banco a partir da aplicação.
Obrigado pela ajuda! Esperando por artigos seus a respeito.

Renato_groffe
|
MVP
    04 dez 2012

Opa Thiago, sem problemas.

Vou tentar montar a partir da próxima semana algo que envolva JQuery + WCF + Fluent NHibernate. Já tinha a intenção de fazer isso antes e vou aproveitar a deixa agora.

Até

Gabrielsimas
   - 27 fev 2015


Citação:
O link passado não funcionou, mas vou usar essa última dica, acho que é melhor sem usar referências de classes e estive lendo alguns artigos a respeito e usa-se mais é para quando é gerado o banco a partir da aplicação.
Obrigado pela ajuda! Esperando por artigos seus a respeito.


E aí Thiago. Conseguiu resolver o seu problema? caso sim nos informe para que possamos fechar este tópico como "[RESOLVIDO]".

Forte Abraço.