Привязка данных ASP.net DropDownList с Entity Framework
-
03-07-2019 - |
Вопрос
Я пытаюсь связать 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();, он выдает исключение ObjectDisposeException с сообщением "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;
Другие советы
Почему бы вам просто не использовать List<>?
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();
}
}