Привязка данных ASP.net DropDownList с Entity Framework

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

Вопрос

Я пытаюсь привязать ASP.net DropDownList к результатам запроса структуры сущности, сохраняя при этом многоуровневое разделение. (т.е. я не хочу, чтобы мой код пользовательского интерфейса содержал детали запроса, и мой код уровня данных не имел зависимостей пользовательского интерфейса.) Мой код в обработчике события Page_Load выглядит следующим образом:

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

Хотя мой код данных выглядит следующим образом (есть и промежуточный бизнес-уровень, но там пока нет никакой обработки - только сквозной).

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

Когда я добираюсь до DocTypeDropDownList.DataBind ();, он генерирует исключение ObjectDisposedException с сообщением «DocTypeDropDownList.DataBind ();». Кто-нибудь может посоветовать мне лучший способ справиться с этим?

Спасибо энди

Принятый ответ

Разве вы не должны отделять объекты от контекста? Например:

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

Популярные ответы

Почему бы вам просто не использовать Список <>?

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


Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему