代码首次迁移在部署到Azure时无法正常工作

时间:2015-03-26 06:01:06

标签: c# asp.net-mvc-3 asp.net-mvc-4 azure

我正在使用代码优先迁移方法构建MVC 5网站。另外,请注意我正在使用Visual Studio Online链接到我的Azure网站。因此,当我在VS 2013中使用Team Explorer进行签入时,它会自动部署到Azure网站。

当地一切正常。但是,在将其部署到Azure(签入)时,不会执行以下几点:

  1. 如果使用代码优先方法创建新表,则在部署到Azure时不会创建新表
  2. 不执行种子方法(在configuration.cs文件中)。
  3. 由于上述原因,我必须手动创建新表或添加测试数据。谷歌它的解决方案我已经读过,这是.Net框架中的一个问题,因为默认情况下会设置索引类型(非聚集)。

    所以,我试图使用不同的替代方案。例如:

    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
        ContextKey = "MySolution.Models.ApplicationDbContext";
    
        SetSqlGenerator("System.Data.SqlClient", new AzureSqlGenerator());
    }
    

    我在哪里创建了 AzureSqlGenerator 类:

    public class AzureSqlGenerator : SqlServerMigrationSqlGenerator
        {
            protected override void Generate(CreateTableOperation createTableOperation)
            {
                if ((createTableOperation.PrimaryKey != null)
                    && !createTableOperation.PrimaryKey.IsClustered)
                {
                    createTableOperation.PrimaryKey.IsClustered = true;
                }
    
                base.Generate(createTableOperation);
            }
        }
    

    但是,这不起作用。

    长话短说,我有以下两个问题:

    1. 部署到Azure时是否可以迁移表及其数据?
    2. 如果是这样,那么这样做的正确步骤是什么?
    3. 提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以迁移表格。要迁移数据,您应该使用实体框架的种子方法。

public class SchoolDBInitializer : DropCreateDatabaseAlways<SchoolDBContext>
    {
        protected override void Seed(SchoolDBContext context)
        {
            IList<Standard> defaultStandards = new List<Standard>();

            defaultStandards.Add(new Standard() { StandardName = "Standard 1", Description = "First Standard" });
            defaultStandards.Add(new Standard() { StandardName = "Standard 2", Description = "Second Standard" });
            defaultStandards.Add(new Standard() { StandardName = "Standard 3", Description = "Third Standard" });

            foreach (Standard std in defaultStandards)
                context.Standards.Add(std);

            base.Seed(context);
        }
    }

http://www.entityframeworktutorial.net/code-first/seed-database-in-code-first.aspx

在我看来,您可以做的最好,使用Sql Server数据工具。它将帮助您处理表和数据,因为它使用声明模式。你宣布&#39;应该如何成为您的数据库,并处理de更新。

https://www.youtube.com/watch?v=uPll3dMxTXU