我正在尝试将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();时,它会抛出一个ObjectDisposedException,并带有消息<!> quot; DocTypeDropDownList.DataBind(); <!> quot;。任何人都可以告诉我解决这个问题的最佳方法吗?

谢谢,   安迪

有帮助吗?

解决方案

您是否必须从上下文中分离对象? E.g:

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 <!> lt; <!> gt;?

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归因
不隶属于 StackOverflow
scroll top