Enlace de datos ASP.net DropDownList con Entity Framework
-
03-07-2019 - |
Pregunta
Estoy tratando de vincular una DropDownList de ASP.net a los resultados de una consulta del marco de la entidad, sin dejar de mantener la separación de varios niveles. (es decir, no quiero que mi código de la interfaz de usuario contenga detalles de la consulta, ni que mi código de capa de datos tenga dependencias de la interfaz de usuario). Mi código subyacente en el controlador de eventos Page_Load se ve así:
IEnumerable<Lookup> TypesLookup = Business.DocumentBO.GetDocumentTypes(_LookupTypeID);
DocTypeDropDownList.DataSource = TypesLookup;
DocTypeDropDownList.DataTextField = "Description";
DocTypeDropDownList.DataValueField = "LookupID";
DocTypeDropDownList.DataBind();
Si bien mi código de datos se ve así (también hay una capa comercial intermedia, pero todavía no hay procesamiento allí, solo un paso):
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;
}
}
Cuando llego a DocTypeDropDownList.DataBind () ;, arroja una ObjectDisposedException con el mensaje " DocTypeDropDownList.DataBind (); " ;. ¿Alguien puede aconsejarme sobre la mejor manera de abordar esto?
Gracias Andy
Solución
¿No tienes que separar los objetos del contexto? Por ejemplo:
IEnumerable<Lookup> l = (from c in context.Lookup
where c.LookupTypeID == LookupTypeID
select c);
foreach (Lookup lookup in l)
context.Detach(lookup);
return l;
Otros consejos
¿Por qué no usas una Lista < > ;?
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();
}
}