Erro ao retornar JSON com WCF e FluentNhibernate

03/12/2012

0

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

[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; 
                }
            }
        }
Thiago Porto

Thiago Porto

Responder

Post mais votado

04/12/2012

Thiago,


Bom dia,

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


Renato

Renato Groffe

Renato Groffe
Responder

Mais Posts

04/12/2012

Thiago Porto

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.
Responder

04/12/2012

Renato Groffe

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:

[url]http://stackoverflow.com/questions/9761154/fluent-nhibernate-mapping-hasmany[/url]
Responder

04/12/2012

Thiago Porto

vou testar...
Responder

04/12/2012

Renato Groffe

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.
Responder

04/12/2012

Thiago Porto

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?
Responder

04/12/2012

Renato Groffe

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.
Responder

04/12/2012

Thiago Porto

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.
Responder

04/12/2012

Renato Groffe

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é
Responder

27/02/2015

Gabriel Simas

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.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar