Datenbindung von ASP.net DropDownList mit Entity Framework

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

Frage

Ich versuche, eine ASP.net-DropDownList an die Ergebnisse einer Entity-Framework-Abfrage zu binden, während die Trennung in mehreren Ebenen erhalten bleibt. (dh ich möchte nicht, dass mein UI-Code Abfragedetails enthält, und mein Data Layer-Code keine UI-Abhängigkeiten hat.) Mein Code-Behind im Ereignishandler von PageLoad sieht folgendermaßen aus:

        IEnumerable<Lookup> TypesLookup = Business.DocumentBO.GetDocumentTypes(_LookupTypeID);
        DocTypeDropDownList.DataSource = TypesLookup;
        DocTypeDropDownList.DataTextField = "Description";
        DocTypeDropDownList.DataValueField = "LookupID";
        DocTypeDropDownList.DataBind();

Mein Datencode sieht zwar so aus (es gibt auch eine Business-Zwischenschicht, aber dort gibt es noch keine Verarbeitung - nur einen Durchlauf.):

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

Wenn ich zu DocTypeDropDownList.DataBind (); komme, löst es eine ObjectDisposedException mit der Meldung "DocTypeDropDownList.DataBind ();" aus. Kann mir jemand raten, wie ich das am besten angehen kann?

Danke, Andy

Akzeptierte Antwort

Müssen Sie die Objekte nicht vom Kontext trennen? Z.B:

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

Beliebte Antwort

Warum benutzen Sie nicht einfach eine 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();
    }
}


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum