IEnumerable <t>返回复杂元素死亡过程</t>

时间:2014-06-26 20:11:00

标签: c# asp.net-mvc entity-framework-4

我正在尝试使用Entity Framework返回webapi的元素列表。

搜索工作正常。 数据格式正确,但是,在离开过程后,请稍微思考一下,应用程序就会显示错误:

An unhandled exception of type 'System.StackOverflowException' occurred in mscorlib.dll

源代码:

[HttpGet]
public IEnumerable<Teste> GetAllProducts()
{
    using (var db = new ERPContext())
    {
        db.Configuration.ProxyCreationEnabled = false;

        var dados = (
                from a in db.TipoPessoa                        
                select new 
                {
                    a.TipoPessoaID,
                    a.Descricao,
                    a.UsuarioCad
                }).AsQueryable().Select(item => new Teste { TipoPessoaID = item.TipoPessoaID, Descricao = item.Descricao, Usuario = item.UsuarioCad });
        return dados.ToArray<Teste>();
    }
}

返回:

public class Teste
{
    public int TipoPessoaID { get; set;}
    public string Descricao { get; set;}
    public virtual Usuario Usuario { get; set; }
}

其他课程:

public class TipoPessoa : IEntidadeBase
{
    [Key]
    public int TipoPessoaID { get; set; }
    public string Sigla { get; set; }
    public string Descricao { get; set; }

    /* Campos fixos */
    public int EmpresaID { get; set; }
    public string Fixo { get; set; }
    public string Status { get; set; }
    public string Apagado { get; set; }
    public DateTime? DtApagado { get; set; }
    public int UsuCad { get; set; }
    public DateTime DtCad { get; set; }
    public int UsuAlt { get; set; }
    public DateTime DtAlt { get; set; }
    public int UsuUltAlt { get; set; }
    public DateTime DtUltAlt { get; set; }

    [ForeignKey("UsuCad")]
    public virtual Usuario UsuarioCad { get; set; }
    [ForeignKey("UsuAlt")]
    public virtual Usuario UsuarioAlt { get; set; }
    [ForeignKey("UsuUltAlt")]
    public virtual Usuario UsuarioUltAlt { get; set; }
    [ForeignKey("EmpresaID")]
    public virtual Empresa Empresa { get; set; }
}

public class Usuario : IEntidadeBase
{
    [Key]
    public int UsuarioID { get; set; }

    [Obrigatorio]
    [Display(Name = "Login")]
    public string Login { get; set; }
    [Obrigatorio]
    [Display(Name = "E-mail")]
    public string Email { get; set; }

    [Obrigatorio]
    [Display(Name = "Nome")]
    public string Nome { get; set; }

    [Display(Name = "Senha")]
    [StringLength(50)]
    [DataType(DataType.Password)]
    public string Senha { get; set; }

    public string Chave { get; set; }
    [Display(Name="Data de ativação do usuário")]
    public Nullable<DateTime> DtAtivacao { get; set; }
    [Display(Name = "Data da última conexão no sistema")]
    public Nullable<DateTime> DtEntrada { get; set; }
    [Display(Name = "Data da última saida do sistema")]
    public Nullable<DateTime> DtSaida { get; set; }

    public int? EmpresaIDLogada { get; set; }
    public int? PessoaIDLogada { get; set; }
    public int? ClienteID { get; set; }
    public int? FilialID { get; set; }

    [Display(Name = "Tipo de liberação")]
    public string TipoLiberacao { get; set; }
    [Display(Name = "Tipo de cadastro")]
    public string TipoCadastro { get; set; }

    public string AlterarSenha { get; set; }

    public virtual string DtAtivacaoDesc
    {
        get
        {
            if (DtAtivacao != null)
            {
                return String.Format("{0:dd/MM/yyyy}", DtAtivacao);
            }
            else
            {
                return "ND";
            }
        }
    }
    [Display(Name = "Qtde. de acessos no sistema")]
    public int QtdeAcesso { get; set; }

    public int EmpresaID { get; set; }
    public string Fixo { get; set; }
    public string Status { get; set; }
    public string Apagado { get; set; }
    public DateTime? DtApagado { get; set; }
    public int UsuCad { get; set; }
    public DateTime DtCad { get; set; }
    public int UsuAlt { get; set; }
    public DateTime DtAlt { get; set; }
    public int UsuUltAlt { get; set; }
    public DateTime DtUltAlt { get; set; }

    [ForeignKey("UsuCad")]
    public virtual Usuario UsuarioCad { get; set; }
    [ForeignKey("UsuAlt")]
    public virtual Usuario UsuarioAlt { get; set; }
    [ForeignKey("UsuUltAlt")]
    public virtual Usuario UsuarioUltAlt { get; set; }
    [ForeignKey("EmpresaID")]
    public virtual Empresa Empresa { get; set; }
    [ForeignKey("EmpresaIDLogada")]
    public virtual Empresa EmpresaLogada { get; set; }
    [ForeignKey("PessoaIDLogada")]
    public virtual Pessoa PessoaLogada { get; set; }
    [ForeignKey("ClienteID")]
    public virtual Cliente Cliente { get; set; }
    [ForeignKey("FilialID")]
    public virtual Filial Filial { get; set; }

    [ForeignKey("UsuarioID")]
    public virtual ICollection<UsuarioAcesso> ListaAcessos { get; set; }

    public virtual bool Criar()
    {
        return true;
    }
}

0 个答案:

没有答案