使用實體框架將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();
    }
}


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因