Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 实体框架:上下文在看似随机的时间未及时准备好以供请求,仅限于生产环境_Asp.net_Sql Server 2008_Entity Framework 4_Datacontext_Production Environment - Fatal编程技术网

Asp.net 实体框架:上下文在看似随机的时间未及时准备好以供请求,仅限于生产环境

Asp.net 实体框架:上下文在看似随机的时间未及时准备好以供请求,仅限于生产环境,asp.net,sql-server-2008,entity-framework-4,datacontext,production-environment,Asp.net,Sql Server 2008,Entity Framework 4,Datacontext,Production Environment,就在昨天,我终于在网上发布了我一直在开发的ASP.NET应用程序。导入了数据库表和数据,更改了我的web.config中的连接字符串,所有这些都很好。奇怪的是,在这个生产服务器上,由于服务器错误,在看似随机的时间,页面将无法加载。你可以自己看看: 尝试导航到类似页面的内容,或除第一个列出的播客以外的任何其他播客。您可能会遇到“对象引用未设置为对象实例”错误。这很奇怪,因为错误中引用的代码行位于Site.Master在站点的每个页面上使用的部分视图中(在尝试检索有关最新播客插曲的信息时)。在访问

就在昨天,我终于在网上发布了我一直在开发的ASP.NET应用程序。导入了数据库表和数据,更改了我的web.config中的连接字符串,所有这些都很好。奇怪的是,在这个生产服务器上,由于服务器错误,在看似随机的时间,页面将无法加载。你可以自己看看:

尝试导航到类似页面的内容,或除第一个列出的播客以外的任何其他播客。您可能会遇到“对象引用未设置为对象实例”错误。这很奇怪,因为错误中引用的代码行位于Site.Master在站点的每个页面上使用的部分视图中(在尝试检索有关最新播客插曲的信息时)。在访问HomeController控制的页面时,我还没有遇到过这个错误。ArticleController或AdminController控制的任何东西都喜欢在第一次查看时爆炸。在访问列表上的第一个播客之后,事情往往会顺利进行一段时间(http://world-8.net/podcast/world-8-50c--pax-2012-part-3/52/)在尝试导航到其他任何地方之前。但这只是暂时的

在我的模型结构中,播客和文章是一对一的关系。文章有一个PodcastId属性,但这不是一个FK,因为不是每一篇文章都是关于一个podcast的。在显示文章信息时,我只需要有关Podcast对象的信息

这几乎就好像数据上下文试图“赶上”模型创建过程,而没有及时完成请求处理。我自己从来没有看到过这个具体的错误,但该网站的一位用户非常友好地向我展示了他在这方面所看到的:

对我来说真是令人困惑的行为;我在开发环境中从未遇到过这个问题。而且它的不一致性使得我很难确定问题所在

如果有人更精通EntityFramework,可以对此有所了解,我将不胜感激

希望对您有所帮助的一些代码示例:

在我的模型命名空间中:

public class Article
{
    public int Id { get; set; }
    public string Title { get; set; }
    public int UserId { get; set; }
    public string AuthorName { get; set; }
    public string Content { get; set; }
    public string ArticleType { get; set; }
    public DateTime PublishDate { get; set; }
    public int PodcastId { get; set; }
    public Podcast ArticlePodcast { get; set; }

    public virtual ICollection<ArticleComment> Comments { get; set; }
}

public class Podcast
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string MP3path { get; set; }
    public string Description { get; set; }
    public DateTime PublishDate { get; set; }
    public string Duration { get; set; }

    public virtual ICollection<PodcastTimestamp> Timestamps { get; set; }
    public virtual ICollection<PodcastGuest> Guests { get; set; }
}
public class BaseController : Controller
{
    public static PodcastRepository _podcastRepository = new PodcastRepository();
    public static ArticleRepository _articleRepository = new ArticleRepository();
    public static UserRepository _userRepository = new UserRepository();

    protected override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        ViewData["MostRecentEpisode"] = _articleRepository.GetMostRecentPodcastArticle();
        base.OnActionExecuted(filterContext);
    }
}

[HandleError]
public class HomeController : BaseController
{
    public ActionResult Index()
    {
        var pageNumber = 0;
        if(!string.IsNullOrWhiteSpace(Request.QueryString["p"]))
        {
            pageNumber = int.Parse(Request.QueryString["p"]);
        }
        var category = Request.QueryString["category"] ?? "";

        ViewData["Articles"] = _articleRepository.GetOnePageOfArticles(pageNumber, category);

        if (!string.IsNullOrEmpty(Request.QueryString["category"]))
        {
            ViewData["TotalArticleCount"] = _articleRepository.GetArticlesByType(category).Count();
        }
        else
        {
            ViewData["TotalArticleCount"] = _articleRepository.GetAllArticles().Count();
        }

        return View();
    }

    public ActionResult AboutUs()
    {
        return View();
    }
}

public class ArticleController : BaseController
{
    public ActionResult Article(int aId)
    {
        ViewData.Model = _articleRepository.GetArticleById(aId);

        return View();
    }
}
编辑:应MilkyWayJoe的请求,在My Global.asax.cs中编辑我的应用程序\u Start()方法

protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterRoutes(RouteTable.Routes);

        Database.SetInitializer<EF4DataContext>(null);
    }
受保护的无效应用程序\u Start()
{
RegisterAllAreas();
注册地址(RouteTable.Routes);
Database.SetInitializer(null);
}

只是一个想法。。你在global.asax.cs或context类上有任何类型的播种吗?@MilkyWayJoe恐怕我不熟悉这个上下文中“播种”的定义。但我已经在Global.asax.cs中发布了我的应用程序_Start()方法,如果有任何相关的内容。我只是想知道,因为问题的标题让我认为EF正在清理您的数据并重新创建它,好像您有一些设置来破坏数据库并在某处为其添加测试数据。。就像我说的,只是一个想法……我在其他地方看到过这个答案,也许你可以试试:()@MilkyWayJoe:我试了一下,在我的每个控制器中设置了DataContext之后,添加了一行“DataContext.Database.Initialize(force:false);”。这似乎没有影响任何事情(
public class BaseController : Controller
{
    public static PodcastRepository _podcastRepository = new PodcastRepository();
    public static ArticleRepository _articleRepository = new ArticleRepository();
    public static UserRepository _userRepository = new UserRepository();

    protected override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        ViewData["MostRecentEpisode"] = _articleRepository.GetMostRecentPodcastArticle();
        base.OnActionExecuted(filterContext);
    }
}

[HandleError]
public class HomeController : BaseController
{
    public ActionResult Index()
    {
        var pageNumber = 0;
        if(!string.IsNullOrWhiteSpace(Request.QueryString["p"]))
        {
            pageNumber = int.Parse(Request.QueryString["p"]);
        }
        var category = Request.QueryString["category"] ?? "";

        ViewData["Articles"] = _articleRepository.GetOnePageOfArticles(pageNumber, category);

        if (!string.IsNullOrEmpty(Request.QueryString["category"]))
        {
            ViewData["TotalArticleCount"] = _articleRepository.GetArticlesByType(category).Count();
        }
        else
        {
            ViewData["TotalArticleCount"] = _articleRepository.GetAllArticles().Count();
        }

        return View();
    }

    public ActionResult AboutUs()
    {
        return View();
    }
}

public class ArticleController : BaseController
{
    public ActionResult Article(int aId)
    {
        ViewData.Model = _articleRepository.GetArticleById(aId);

        return View();
    }
}
protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterRoutes(RouteTable.Routes);

        Database.SetInitializer<EF4DataContext>(null);
    }