【问题标题】:Seed method isn't triggered on published IIS在已发布的 IIS 上未触发种子方法
【发布时间】:2015-07-02 12:59:58
【问题描述】:

我刚刚将我的应用发布到 IIS 服务器 (localhost)。

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

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

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

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

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");

    }
}

【问题讨论】:

  • “我的种子方法没有被触发” - 你确定吗?你的日志工作吗?
  • 你保存了吗?为什么需要var db = new CobwebsContext();
  • @CodeCaster 是的,我的日志文件确实有一些行,但上面代码中的三个都没有
  • @BikalBhattarai 我们的一位开发人员是这样编写 dbGen 类的,它接收一个上下文对象,在其中调用 saveChanges
  • 在 Visual Studio 上运行时,它确实按预期工作

标签: c# asp.net-mvc entity-framework iis entity-framework-migrations


【解决方案1】:

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

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

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

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

感谢大家的帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多