Ligação de dados ASP.net DropDownList com Entity Framework
-
03-07-2019 - |
Pergunta
Estou tentando ligar um ASP.net DropDownList com os resultados de uma consulta de estrutura de entidade, mantendo ainda a separação multi-tier. (Ou seja, eu não quero o meu código de UI para conter consulta detalhes, nem o meu código de camada de dados para ter UI dependências.) Meu código-behind na aparência do manipulador de eventos Page_Load assim:
IEnumerable<Lookup> TypesLookup = Business.DocumentBO.GetDocumentTypes(_LookupTypeID);
DocTypeDropDownList.DataSource = TypesLookup;
DocTypeDropDownList.DataTextField = "Description";
DocTypeDropDownList.DataValueField = "LookupID";
DocTypeDropDownList.DataBind();
Enquanto meus olhares de código de dados como este (há uma camada intermediária de negócios, bem como, mas não há nenhum processamento lá ainda - apenas um pass-through.):
public static IEnumerable<Lookup> GetLookups(int LookupTypeID)
{
using (VLFDocumentEntities context = new VLFDocumentEntities())
{
IEnumerable<Lookup> l = (from c in context.Lookup
where c.LookupTypeID == LookupTypeID
select c);
return l;
}
}
Quando eu chegar ao DocTypeDropDownList.DataBind () ;, ele lança uma ObjectDisposedException com a mensagem "DocTypeDropDownList.DataBind ();". Alguém pode me aconselhar sobre a melhor maneira de lidar com isso?
Obrigado, Andy
Solução
Você não tem que retirar os objetos do contexto? Por exemplo:
IEnumerable<Lookup> l = (from c in context.Lookup
where c.LookupTypeID == LookupTypeID
select c);
foreach (Lookup lookup in l)
context.Detach(lookup);
return l;
Outras dicas
Por que você não apenas usar um List <>?
public static List<Lookup> GetLookups(int LookupTypeID)
{
using (VLFDocumentEntities context = new VLFDocumentEntities())
{
return (from c in context.Lookup
where c.LookupTypeID == LookupTypeID
select c).ToList();
}
}