0

我的实体框架使用出现问题,我认为这可能是因为我错误地使用了我的数据库上下文。

我时不时地在我的日志中看到错误消息:“在创建模型时无法使用上下文。”

该错误并不总是发生,并且似乎是在新的应用程序负载上,或者如果我编译我的项目并在编译时刷新浏览器选项卡。

下面的函数是错误的,是从我的母版页调用的。

public static class UserFunctions
{
    private static peopleSwimmingContext _db = new peopleSwimming.Models.peopleSwimmingContext();

    public static String GetUserRole(Int32 UserID) {

        String returnedRole = String.Empty;

        var foundUser = _db.Users.Where(w => w.UserId == UserID).FirstOrDefault();
        if (foundUser != null)
        {
            returnedRole = foundUser.Role.Name;
        }
        return returnedRole;
    }
}

任何提示将不胜感激!

哦,这是我的内部堆栈跟踪:

内部堆栈跟踪:

在 System.Data.Entity.Internal.LazyInternalContext.InitializeContext() 在 System.Data.Entity.Internal.InternalContext.Initialize() 在 System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) 在 System.Data.Entity .Internal.Linq.InternalSet 1.Initialize() at System.Data.Entity.Internal.Linq.InternalSet1.get_InternalContext() 在 System.Data.Entity.Infrastructure.DbQuery1.System.Linq.IQueryable.get_Provider() at System.Linq.Queryable.Where[TSource](IQueryable1 源,表达式`1 谓词)在 peopleSwimming.Logic.UserFunctions.GetUserRole(Int32 UserID) 在 c:\svn\peopleSwim\peopleSwimming\Logic\UserFunctions.cs:line 18 at peopleSwimming._Home.Page_Load(Object sender, EventArgs e ) 在 c:\svn\peopleSwim\peopleSwimming\Home.aspx.cs:line 25 at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) at System.Web.UI.Control.OnLoad(EventArgs e)在 System.Web.UI.Control.LoadRecursive() 在 System.Web.UI.Page.ProcessRequestMain(布尔 includeStagesBeforeAsyncPoint,布尔 includeStagesAfterAsyncPoint)

4

1 回答 1

3

尝试将您的代码包装在using初始化和处理数据上下文的语句中,以便它仅在您需要它之前可用到之后。这也将确保它被处理掉。

另外,您不需要该Where方法,只需使用FirstOrDefault.

public static class UserFunctions
{
    public static String GetUserRole(Int32 UserID) 
    {
        using (peopleSwimmingContext _db = new peopleSwimming.Models.peopleSwimmingContext())
        {
            String returnedRole = String.Empty;

            var foundUser = _db.Users.FirstOrDefault(w => w.UserId == UserID);

            if (foundUser != null)
            {
                returnedRole = foundUser.Role.Name;
            }

            return returnedRole;
        }
    }
}
于 2013-04-22T08:41:14.237 回答