我正在尝试使用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;
}
}