C# 错误:ObjectContext实例已被释放,无法再用于需要连接的操作

C# 错误:ObjectContext实例已被释放,无法再用于需要连接的操作,c#,entity-framework,entity-framework-4,linq-to-entities,objectdatasource,C#,Entity Framework,Entity Framework 4,Linq To Entities,Objectdatasource,我在C#中使用asp.net和EF4 我有一个与ObjectDataSource关联的详细视图 <asp:ObjectDataSource ID="uxEntityDataSourceAuthors" runat="server" SelectMethod="GetAuthors" TypeName="WebProject.Web.Cms.AdminCms.Sections.CmsContents.ContentInformation">

我在C#中使用asp.net和EF4

我有一个与
ObjectDataSource
关联的详细视图

<asp:ObjectDataSource ID="uxEntityDataSourceAuthors" runat="server" 
        SelectMethod="GetAuthors" 
        TypeName="WebProject.Web.Cms.AdminCms.Sections.CmsContents.ContentInformation">
    </asp:ObjectDataSource>

知道我做错了什么以及如何修复吗?

在获取数据之前,您正在关闭名为
上下文的
CmsConnectionStringEntityDataModel
。请记住,
AsEnumerable()
将返回一个惰性枚举数,当您返回并处理上下文时,没有从源中读取任何数据


使用
ToArray()
(或
ToList()
)确保在关闭源代码之前将数据放入内存。

调用numerable不会枚举集合,它只是将其从
IQeuryable
更改为
IEnumerble
。您正在从数据库中提取数据之前处理ObjectContext。使用将枚举集合并获取数据的
ToList()

列表和数组方法分别称为ToList()和ToArray(),Id没有AsArray()(或AsList())只有ToList()。
    public IEnumerable<CmsAuthor> GetAuthors()
    {
    if (Roles.IsUserInRole("CMS-AUTHOR"))
    {
    using (CmsConnectionStringEntityDataModel context = new CmsConnectionStringEntityDataModel())
    {
                            // Display all Authors for specific logged-in User.
                            // Get Guid for current logged-in User.
                            MembershipUser myLoggedinUser = Membership.GetUser();
                            Guid myUserGuid = (Guid)myLoggedinUser.ProviderUserKey;
                            // Get list of Authors filtering my current logged-in User.
                            var myAuthorsForAuthor = from a in context.CmsAuthors
                                                     where a.UserId == myUserGuid
                                                     orderby a.LastName ascending
                                                     select a;
                            return myAuthorsForAuthor.AsEnumerable();
                        }
                    }
                    return null;  
 }
 The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.