使用实体框架将ASP.net DropDownList数据绑定

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

我正在尝试将ASP.net DropDownList绑定到实体框架查询的结果,同时仍然保持多层分离。 (即我不希望我的UI代码包含查询详细信息,也不希望我的数据层代码具有UI依赖性。)我在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();时,它会抛出一个带有消息“DocTypeDropDownList.DataBind();”的ObjectDisposedException。任何人都可以告诉我解决这个问题的最佳方法吗?

谢谢,安迪

一般承认的答案

你不必从上下文中分离对象吗?例如:

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


许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因