Liaison de données ASP.net DropDownList avec Entity Framework

3-tier asp.net data-binding entity-framework

Question

J'essaie de lier une DropDownList ASP.net aux résultats d'une requête de structure 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();

Alors que mon code de données ressemble à ceci (il existe également une couche de gestion intermédiaire, mais aucun traitement n’y existe pour le moment, mais une simple transmission):

    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;
        }
    }

Lorsque 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 résoudre ce problème?

Merci, Andy

Réponse acceptée

Ne devez-vous pas détacher les objets du contexte? Par exemple:

IEnumerable<Lookup> l = (from c in context.Lookup
                        where c.LookupTypeID == LookupTypeID
                        select c);
foreach (Lookup lookup in l)
  context.Detach(lookup);
return l;

Réponse populaire

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();
    }
}


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow