1

コード ファーストの移行を有効にしました。これが私のconfiguration.csです:

public sealed class Configuration : DbMigrationsConfiguration<App.AppDbContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
    }

    protected override void Seed(AppDbContext context)
    {
        SqlConnection.ClearAllPools();
        context.Database.CreateIfNotExists();
        System.Data.Entity.Database.SetInitializer(new MigrateDatabaseToLatestVersion<AppDbContext, Configuration>());

        if (!WebMatrix.WebData.WebSecurity.Initialized)
        {
            WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
        }

        SeedMembership(context);

    }

SeedMembership を次のように使用します。

   private int SeedMembership(DbContext context)
    {

        var roles = (SimpleRoleProvider)Roles.Provider;
        var membership = (SimpleMembershipProvider)Membership.Provider;

        if (!roles.RoleExists("Administrator"))
        {
            roles.CreateRole("Administrator");
        }
        if (!roles.RoleExists("User"))
        {
            roles.CreateRole("User");
        }
        if (!roles.RoleExists("Moderator"))
        {
            roles.CreateRole("Moderator");
        }

        if (membership.GetUser("admin", false) == null)
        {
            membership.CreateUserAndAccount("admin", "covert");
        }
        if (!Roles.IsUserInRole("admin", "Administrator"))
        {
            roles.AddUsersToRoles(new[] { "admin" }, new[] { "Administrator" });
        }

        context.SaveChanges();
        return membership.GetUserId("admin");
    }

web.config で定義されている接続文字列は 1 つだけです。

        <add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=.\;Initial Catalog=App;Trusted_Connection=True;MultipleActiveResultSets=True;" />

update-database をローカルで実行すると、パッケージ マネージャー コンソールに「シード メソッドを実行しています」と表示され、期待どおりにすべてがシードされます。

ただし、Azure データベースに対して update-database を実行すると (ここで Azure が関連しているかどうかはわかりません)、「Running Seed Method」が表示されますが、データベースはロール/管理者ユーザーで更新されません。他のテーブルが作成されます。

私は一晩中これに費やしましたが、他にどこを見るべきかわかりません。Azure dbを移行するために私が使用しているものは次のとおりです。

Update-Database -Verbose -StartUpProjectName "App" -ConnectionString "Server=tcp:app.database.windows.net,1433;Database=App;User ID=Dbadmin@app;Password=password;Trusted_Connection=False;Encrypt=True;接続タイムアウト = 30;MultipleActiveResultSets = True;最大プール サイズ = 100;" -ConnectionProviderName "System.Data.SqlClient"

なぜこれが機能しないのですか?

4

0 に答える 0