Liaison de données ASP.net DropDownList avec Entity Framework
-
03-07-2019 - |
Question
J'essaie de lier une DropDownList ASP.net aux résultats d'une requête du cadre d'entité, tout en maintenant une séparation à plusieurs niveaux. (Par exemple, je ne veux pas que mon code d'interface utilisateur contienne des détails de requête, ni que mon code de couche de données ait des dépendances d'interface utilisateur.) Mon code-behind dans le gestionnaire d'événements Page_Load ressemble à ceci:
IEnumerable<Lookup> TypesLookup = Business.DocumentBO.GetDocumentTypes(_LookupTypeID);
DocTypeDropDownList.DataSource = TypesLookup;
DocTypeDropDownList.DataTextField = "Description";
DocTypeDropDownList.DataValueField = "LookupID";
DocTypeDropDownList.DataBind();
Bien que mon code de données ressemble à ceci (il existe également une couche de gestion intermédiaire, mais aucun traitement n'y est encore effectué - une simple transmission est nécessaire.):
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;
}
}
Quand j'arrive à DocTypeDropDownList.DataBind () ;, il lève une exception ObjectDisposedException avec le message & "DocTypeDropDownList.DataBind (); &". Quelqu'un peut-il me conseiller sur la meilleure façon de s'y attaquer?
Merci, Andy
La solution
Ne devez-vous pas détacher les objets du contexte? E.g:
IEnumerable<Lookup> l = (from c in context.Lookup
where c.LookupTypeID == LookupTypeID
select c);
foreach (Lookup lookup in l)
context.Detach(lookup);
return l;
Autres conseils
Pourquoi n'utilisez-vous pas simplement une liste < >?
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();
}
}