种子方法未在已发布的 IIS 上触发

Seed method isn't triggered on published IIS

我刚刚将我的应用程序发布到 IIS 服务器(本地主机)。

这是为了检查发布过程。一切顺利,文件已复制,站点正常启动,没有错误,数据库已创建。

我想念一件事:数据。我的种子方法没有被触发,因此初始数据丢失。

我尝试在 Microsoft 站点和 Whosebug 中查找,但无济于事。

这些是我的迁移配置和种子:

internal sealed class Configuration : 
    DbMigrationsConfiguration<CobwebsCommon.DAL.CobwebsContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
        ContextKey = "CobwebsCommon.DAL.CobwebsContext";
    }

    protected override void Seed(CobwebsCommon.DAL.CobwebsContext context)
    {
        //if (System.Diagnostics.Debugger.IsAttached == false)
        //    System.Diagnostics.Debugger.Launch();
        Logger.Info("Cobwebs DB seed started");
        try
        {
            var db = new CobwebsContext();

            DbGen dbGen = new DbGen(context);
            dbGen.GenerateDb();
        }
        catch (Exception e)
        {
            Logger.Error("Error creating db: {0}", e);
        }
        Logger.Info("Cobwebs DB seed finished");

    }
}

好的,正如你告诉我的那样,我应该使用初始化程序。与开发不同,在部署时,web.config 必须有一个初始化器(好吧,除非你不需要任何数据库初始化数据)。

当您使用 VS 2013 中的发布对话框进行发布时,您可以选择告知数据库正在使用代码优先迁移。 根据本指南:http://www.asp.net/mvc/overview/deployment/visual-studio-web-deployment/deploying-to-iis,应将 MigrateDatabaseToLatestVersion 类型的初始化程序添加到 web.config,但在我的情况下它没有,这就是未触发种子方法的原因。

我的项目的问题是 web.config 已经有一个上下文标记,所以我猜发布序列跳过了添加它自己的初始化程序,因为它相信我知道我在做什么,而我不知道:)

删除相关的上下文标签修复了这个问题。现在调用种子方法,并登录到记录器。

感谢大家的帮助