C# EF 6数据库。迁移不';t在链接的项目中应用或查看新迁移

C# EF 6数据库。迁移不';t在链接的项目中应用或查看新迁移,c#,asp.net-mvc,entity-framework,database-migration,C#,Asp.net Mvc,Entity Framework,Database Migration,嘿,伙计们,这是我不久前的第一篇帖子 我最近遇到了一些我认为是bug或者我很愚蠢的问题。在过去的3个小时里,我一直在尝试为我的应用程序测试创建一个单独的testcontext,以便在构建之前测试我的应用程序数据库是否正常工作,这意味着我试图用种子testdata生成一个数据库,但我在测试数据库中实现迁移时遇到了困难 最奇怪的是,迁移历史记录表已经创建,但迁移中定义的表却没有。另外,当我在主应用程序上使用更新数据库注释时,一切都很好 这是我的测试: [Fact] private a

嘿,伙计们,这是我不久前的第一篇帖子

我最近遇到了一些我认为是bug或者我很愚蠢的问题。在过去的3个小时里,我一直在尝试为我的应用程序测试创建一个单独的testcontext,以便在构建之前测试我的应用程序数据库是否正常工作,这意味着我试图用种子testdata生成一个数据库,但我在测试数据库中实现迁移时遇到了困难

最奇怪的是,迁移历史记录表已经创建,但迁移中定义的表却没有。另外,当我在主应用程序上使用更新数据库注释时,一切都很好

这是我的测试:

    [Fact]
    private async void GenerateContextTest()
    {
        try
        {
            var connectionstring = new SqlConnectionStringBuilder
            {
                DataSource = Settings.Host,
                MultipleActiveResultSets = true,
                TrustServerCertificate = true
            }.ConnectionString;

            _db = ThrowawayDatabase.Create(connectionstring);

            DbContextOptionsBuilder<TestContext> optionsbuilder = new DbContextOptionsBuilder<TestContext>();
            optionsbuilder.UseSqlServer(_db.ConnectionString, sqlServer => sqlServer.MigrationsAssembly("YGO-MetaBuilder"));
            _db.Dispose();
            TestContext context = new TestContext(optionsbuilder.Options);
            
            var migrations_pending = context.Database.GetPendingMigrations();
            var migrations = context.Database.GetMigrations();
            var migrations_applied = context.Database.GetAppliedMigrations();
            await context.Database.MigrateAsync();
            context.SaveChanges();
            
            Assert.True(true);
        }catch(Exception e)
        {
            Assert.True(false, e.Message);
        }
        _db.Dispose();
    }
[事实]
专用异步void GenerateContextTest()
{
尝试
{
var connectionstring=new-SqlConnectionStringBuilder
{
DataSource=Settings.Host,
MultipleActiveResultSets=true,
TrustServerCertificate=true
}.连接字符串;
_db=一次性数据库.Create(connectionstring);
DbContextOptionsBuilder optionsbuilder=新的DbContextOptionsBuilder();
optionsbuilder.UseSqlServer(_db.ConnectionString,sqlServer=>sqlServer.MigrationsAssembly(“YGO MetaBuilder”);
_db.Dispose();
TestContext=新的TestContext(optionsbuilder.Options);
var migrations_pending=context.Database.GetPendingMigrations();
var migrations=context.Database.GetMigrations();
var migrations_applicated=context.Database.getappliedmiglations();
wait context.Database.MigrateAsync();
SaveChanges();
断言。真(真);
}捕获(例外e)
{
Assert.True(false,e.Message);
}
_db.Dispose();
}
以下是我的背景:

public class TestContext : DbContext
{

    public TestContext (DbContextOptions<TestContext> options)
        : base(options)
    {

    }

    public DbSet<YGO_MetaBuilder.Models.Character> Character { get; set; }

    public DbSet<YGO_MetaBuilder.Models.Image> Image { get; set; }

    public DbSet<YGO_MetaBuilder.Models.MainItem> MainItem { get; set; }

    public DbSet<YGO_MetaBuilder.Models.MonsterCard> MonsterCard { get; set; }
    public DbSet<YGO_MetaBuilder.Models.SpellCard> SpellCard { get; set; }
    public DbSet<YGO_MetaBuilder.Models.Skill> Skill { get; set; }
    public DbSet<YGO_MetaBuilder.Models.SpellCardType> SpellCardType { get; set; }
    public DbSet<YGO_MetaBuilder.Models.TrapCard> TrapCard { get; set; }
    public DbSet<YGO_MetaBuilder.Models.TrapCardType> TrapCardType { get; set; }
    public DbSet<YGO_MetaBuilder.Models.User> User { get; set; }
    public DbSet<YGO_MetaBuilder.Models.UserDeck> UserDeck { get; set; }
    public DbSet<YGO_MetaBuilder.Models.MonsterAttribute> MonsterAttribute { get; set; }
    public DbSet<YGO_MetaBuilder.Models.MonsterCardType> MonsterCardType { get; set; }
    public DbSet<YGO_MetaBuilder.Models.MonsterDeckType> MonsterDeckType { get; set; }
}
公共类TestContext:DbContext
{
公共测试上下文(DbContextOptions)
:基本(选项)
{
}
公共数据库集字符{get;set;}
公共数据库集映像{get;set;}
公共DbSet main项{get;set;}
公共数据库集卡{get;set;}
公共数据库集拼写卡{get;set;}
公共数据库集技能{get;set;}
公共数据库集SpellCardType{get;set;}
公共DbSet TrapCard{get;set;}
公共DbSet TrapCardType{get;set;}
公共数据库集用户{get;set;}
公共数据库集用户组{get;set;}
公共数据库集属性{get;set;}
公共数据库集类型{get;set;}
公共数据库集类型{get;set;}
}
以下是迁移:

public partial class InitialCreate : Migration
        {
            protected override void Up(MigrationBuilder migrationBuilder)
            {
                migrationBuilder.CreateTable(
                    name: "Image",
                    columns: table => new
                    {
                        Id = table.Column<int>(type: "int", nullable: false)
                            .Annotation("SqlServer:Identity", "1, 1"),
                        Location = table.Column<string>(type: "nvarchar(max)", nullable: true),
                        ContentType = table.Column<string>(type: "nvarchar(max)", nullable: true),
                        FileName = table.Column<string>(type: "nvarchar(max)", nullable: true),
                        Size = table.Column<int>(type: "int", nullable: false)
                    },
                    constraints: table =>
                    {
                        table.PrimaryKey("PK_Image", x => x.Id);
                    });

                migrationBuilder.CreateTable(
                    name: "MonsterAttribute",
                    columns: table => new
                    {
                        Id = table.Column<int>(type: "int", nullable: false)
                            .Annotation("SqlServer:Identity", "1, 1"),
                        AttributeName = table.Column<string>(type: "nvarchar(max)", nullable: true)
                    },
                    constraints: table =>
                    {
                        table.PrimaryKey("PK_MonsterAttribute", x => x.Id);
                    });

                migrationBuilder.CreateTable(
                    name: "MonsterCardType",
                    columns: table => new
                    {
                        Id = table.Column<int>(type: "int", nullable: false)
                            .Annotation("SqlServer:Identity", "1, 1"),
                        TypeName = table.Column<string>(type: "nvarchar(max)", nullable: true)
                    },
                    constraints: table =>
                    {
                        table.PrimaryKey("PK_MonsterCardType", x => x.Id);
                    });

                migrationBuilder.CreateTable(
                    name: "MonsterDeckType",
                    columns: table => new
                    {
                        Id = table.Column<int>(type: "int", nullable: false)
                            .Annotation("SqlServer:Identity", "1, 1"),
                        TypeName = table.Column<string>(type: "nvarchar(max)", nullable: true)
                    },
                    constraints: table =>
                    {
                        table.PrimaryKey("PK_MonsterDeckType", x => x.Id);
                    });

                migrationBuilder.CreateTable(
                    name: "Skill",
                    columns: table => new
                    {
                        Id = table.Column<int>(type: "int", nullable: false)
                            .Annotation("SqlServer:Identity", "1, 1"),
                        Name = table.Column<string>(type: "nvarchar(max)", nullable: true),
                        Effect = table.Column<string>(type: "nvarchar(max)", nullable: true)
                    },
                    constraints: table =>
                    {
                        table.PrimaryKey("PK_Skill", x => x.Id);
                    });

                migrationBuilder.CreateTable(
                    name: "SpellCardType",
                    columns: table => new
                    {
                        Id = table.Column<int>(type: "int", nullable: false)
                            .Annotation("SqlServer:Identity", "1, 1"),
                        CardType = table.Column<string>(type: "nvarchar(max)", nullable: true)
                    },
                    constraints: table =>
                    {
                        table.PrimaryKey("PK_SpellCardType", x => x.Id);
                    });

                migrationBuilder.CreateTable(
                    name: "TrapCardType",
                    columns: table => new
                    {
                        Id = table.Column<int>(type: "int", nullable: false)
                            .Annotation("SqlServer:Identity", "1, 1"),
                        CardType = table.Column<string>(type: "nvarchar(max)", nullable: true)
                    },
                    constraints: table =>
                    {
                        table.PrimaryKey("PK_TrapCardType", x => x.Id);
                    });

                migrationBuilder.CreateTable(
                    name: "User",
                    columns: table => new
                    {
                        Id = table.Column<int>(type: "int", nullable: false)
                            .Annotation("SqlServer:Identity", "1, 1"),
                        Username = table.Column<string>(type: "nvarchar(max)", nullable: true),
                        Password = table.Column<string>(type: "nvarchar(max)", nullable: true),
                        Salt = table.Column<string>(type: "nvarchar(max)", nullable: true),
                        SessionSalt = table.Column<string>(type: "nvarchar(max)", nullable: true)
                    },
                    constraints: table =>
                    {
                        table.PrimaryKey("PK_User", x => x.Id);
                    });

                migrationBuilder.CreateTable(
                    name: "Character",
                    columns: table => new
                    {
                        Id = table.Column<int>(type: "int", nullable: false)
                            .Annotation("SqlServer:Identity", "1, 1"),
                        Name = table.Column<string>(type: "nvarchar(max)", nullable: true),
                        BackStory = table.Column<string>(type: "nvarchar(max)", nullable: true),
                        ImageId = table.Column<int>(type: "int", nullable: false)
                    },
                    constraints: table =>
                    {
                        table.PrimaryKey("PK_Character", x => x.Id);
                        table.ForeignKey(
                            name: "FK_Character_Image_ImageId",
                            column: x => x.ImageId,
                            principalTable: "Image",
                            principalColumn: "Id",
                            onDelete: ReferentialAction.Cascade);
                    });

                migrationBuilder.CreateTable(
                    name: "MainItem",
                    columns: table => new
                    {
                        Id = table.Column<int>(type: "int", nullable: false)
                            .Annotation("SqlServer:Identity", "1, 1"),
                        Title = table.Column<string>(type: "nvarchar(max)", nullable: true),
                        ImageId = table.Column<int>(type: "int", nullable: false),
                        Location = table.Column<string>(type: "nvarchar(max)", nullable: true)
                    },
                    constraints: table =>
                    {
                        table.PrimaryKey("PK_MainItem", x => x.Id);
                        table.ForeignKey(
                            name: "FK_MainItem_Image_ImageId",
                            column: x => x.ImageId,
                            principalTable: "Image",
                            principalColumn: "Id",
                            onDelete: ReferentialAction.Cascade);
                    });

                migrationBuilder.CreateTable(
                    name: "MonsterCard",
                    columns: table => new
                    {
                        Id = table.Column<int>(type: "int", nullable: false)
                            .Annotation("SqlServer:Identity", "1, 1"),
                        CardName = table.Column<string>(type: "nvarchar(max)", nullable: true),
                        CardImageId = table.Column<int>(type: "int", nullable: false),
                        CardEffect = table.Column<string>(type: "nvarchar(max)", nullable: true),
                        MonsterAttributeId = table.Column<int>(type: "int", nullable: false),
                        MonsterLevelOrRank = table.Column<int>(type: "int", nullable: false),
                        MonsterDeckTypeId = table.Column<int>(type: "int", nullable: false),
                        MonsterCardTypeId = table.Column<int>(type: "int", nullable: false),
                        MonsterAttack = table.Column<int>(type: "int", nullable: false),
                        MonsterDefence = table.Column<int>(type: "int", nullable: false),
                        CardLocation = table.Column<string>(type: "nvarchar(max)", nullable: true)
                    },
                    constraints: table =>
                    {
                        table.PrimaryKey("PK_MonsterCard", x => x.Id);
                        table.ForeignKey(
                            name: "FK_MonsterCard_Image_CardImageId",
                            column: x => x.CardImageId,
                            principalTable: "Image",
                            principalColumn: "Id",
                            onDelete: ReferentialAction.Cascade);
                        table.ForeignKey(
                            name: "FK_MonsterCard_MonsterAttribute_MonsterAttributeId",
                            column: x => x.MonsterAttributeId,
                            principalTable: "MonsterAttribute",
                            principalColumn: "Id",
                            onDelete: ReferentialAction.Cascade);
                        table.ForeignKey(
                            name: "FK_MonsterCard_MonsterCardType_MonsterCardTypeId",
                            column: x => x.MonsterCardTypeId,
                            principalTable: "MonsterCardType",
                            principalColumn: "Id",
                            onDelete: ReferentialAction.Cascade);
                        table.ForeignKey(
                            name: "FK_MonsterCard_MonsterDeckType_MonsterDeckTypeId",
                            column: x => x.MonsterDeckTypeId,
                            principalTable: "MonsterDeckType",
                            principalColumn: "Id",
                            onDelete: ReferentialAction.Cascade);
                    });

                migrationBuilder.CreateTable(
                    name: "SpellCard",
                    columns: table => new
                    {
                        Id = table.Column<int>(type: "int", nullable: false)
                            .Annotation("SqlServer:Identity", "1, 1"),
                        CardName = table.Column<string>(type: "nvarchar(max)", nullable: true),
                        CardImageId = table.Column<int>(type: "int", nullable: false),
                        CardEffect = table.Column<string>(type: "nvarchar(max)", nullable: true),
                        CardTypeId = table.Column<int>(type: "int", nullable: false)
                    },
                    constraints: table =>
                    {
                        table.PrimaryKey("PK_SpellCard", x => x.Id);
                        table.ForeignKey(
                            name: "FK_SpellCard_Image_CardImageId",
                            column: x => x.CardImageId,
                            principalTable: "Image",
                            principalColumn: "Id",
                            onDelete: ReferentialAction.Cascade);
                        table.ForeignKey(
                            name: "FK_SpellCard_SpellCardType_CardTypeId",
                            column: x => x.CardTypeId,
                            principalTable: "SpellCardType",
                            principalColumn: "Id",
                            onDelete: ReferentialAction.Cascade);
                    });

                migrationBuilder.CreateTable(
                    name: "TrapCard",
                    columns: table => new
                    {
                        Id = table.Column<int>(type: "int", nullable: false)
                            .Annotation("SqlServer:Identity", "1, 1"),
                        CardName = table.Column<string>(type: "nvarchar(max)", nullable: true),
                        CardImageId = table.Column<int>(type: "int", nullable: false),
                        CardEffect = table.Column<string>(type: "nvarchar(max)", nullable: true),
                        CardTypeId = table.Column<int>(type: "int", nullable: false)
                    },
                    constraints: table =>
                    {
                        table.PrimaryKey("PK_TrapCard", x => x.Id);
                        table.ForeignKey(
                            name: "FK_TrapCard_Image_CardImageId",
                            column: x => x.CardImageId,
                            principalTable: "Image",
                            principalColumn: "Id",
                            onDelete: ReferentialAction.Cascade);
                        table.ForeignKey(
                            name: "FK_TrapCard_TrapCardType_CardTypeId",
                            column: x => x.CardTypeId,
                            principalTable: "TrapCardType",
                            principalColumn: "Id",
                            onDelete: ReferentialAction.Cascade);
                    });

                migrationBuilder.CreateTable(
                    name: "CharacterSkill",
                    columns: table => new
                    {
                        CharactersId = table.Column<int>(type: "int", nullable: false),
                        SkillsId = table.Column<int>(type: "int", nullable: false)
                    },
                    constraints: table =>
                    {
                        table.PrimaryKey("PK_CharacterSkill", x => new { x.CharactersId, x.SkillsId });
                        table.ForeignKey(
                            name: "FK_CharacterSkill_Character_CharactersId",
                            column: x => x.CharactersId,
                            principalTable: "Character",
                            principalColumn: "Id",
                            onDelete: ReferentialAction.Cascade);
                        table.ForeignKey(
                            name: "FK_CharacterSkill_Skill_SkillsId",
                            column: x => x.SkillsId,
                            principalTable: "Skill",
                            principalColumn: "Id",
                            onDelete: ReferentialAction.Cascade);
                    });

                migrationBuilder.CreateTable(
                    name: "UserDeck",
                    columns: table => new
                    {
                        Id = table.Column<int>(type: "int", nullable: false)
                            .Annotation("SqlServer:Identity", "1, 1"),
                        DeckName = table.Column<string>(type: "nvarchar(max)", nullable: true),
                        CharacterId = table.Column<int>(type: "int", nullable: false),
                        SkillId = table.Column<int>(type: "int", nullable: false),
                        UserId = table.Column<int>(type: "int", nullable: false)
                    },
                    constraints: table =>
                    {
                        table.PrimaryKey("PK_UserDeck", x => x.Id);
                        table.ForeignKey(
                            name: "FK_UserDeck_Character_CharacterId",
                            column: x => x.CharacterId,
                            principalTable: "Character",
                            principalColumn: "Id",
                            onDelete: ReferentialAction.Cascade);
                        table.ForeignKey(
                            name: "FK_UserDeck_Skill_SkillId",
                            column: x => x.SkillId,
                            principalTable: "Skill",
                            principalColumn: "Id",
                            onDelete: ReferentialAction.Cascade);
                        table.ForeignKey(
                            name: "FK_UserDeck_User_UserId",
                            column: x => x.UserId,
                            principalTable: "User",
                            principalColumn: "Id",
                            onDelete: ReferentialAction.Cascade);
                    });

                migrationBuilder.CreateIndex(
                    name: "IX_Character_ImageId",
                    table: "Character",
                    column: "ImageId");

                migrationBuilder.CreateIndex(
                    name: "IX_CharacterSkill_SkillsId",
                    table: "CharacterSkill",
                    column: "SkillsId");

                migrationBuilder.CreateIndex(
                    name: "IX_MainItem_ImageId",
                    table: "MainItem",
                    column: "ImageId");

                migrationBuilder.CreateIndex(
                    name: "IX_MonsterCard_CardImageId",
                    table: "MonsterCard",
                    column: "CardImageId");

                migrationBuilder.CreateIndex(
                    name: "IX_MonsterCard_MonsterAttributeId",
                    table: "MonsterCard",
                    column: "MonsterAttributeId");

                migrationBuilder.CreateIndex(
                    name: "IX_MonsterCard_MonsterCardTypeId",
                    table: "MonsterCard",
                    column: "MonsterCardTypeId");

                migrationBuilder.CreateIndex(
                    name: "IX_MonsterCard_MonsterDeckTypeId",
                    table: "MonsterCard",
                    column: "MonsterDeckTypeId");

                migrationBuilder.CreateIndex(
                    name: "IX_SpellCard_CardImageId",
                    table: "SpellCard",
                    column: "CardImageId");

                migrationBuilder.CreateIndex(
                    name: "IX_SpellCard_CardTypeId",
                    table: "SpellCard",
                    column: "CardTypeId");

                migrationBuilder.CreateIndex(
                    name: "IX_TrapCard_CardImageId",
                    table: "TrapCard",
                    column: "CardImageId");

                migrationBuilder.CreateIndex(
                    name: "IX_TrapCard_CardTypeId",
                    table: "TrapCard",
                    column: "CardTypeId");

                migrationBuilder.CreateIndex(
                    name: "IX_UserDeck_CharacterId",
                    table: "UserDeck",
                    column: "CharacterId");

                migrationBuilder.CreateIndex(
                    name: "IX_UserDeck_SkillId",
                    table: "UserDeck",
                    column: "SkillId");

                migrationBuilder.CreateIndex(
                    name: "IX_UserDeck_UserId",
                    table: "UserDeck",
                    column: "UserId");
            }

            protected override void Down(MigrationBuilder migrationBuilder)
            {
                migrationBuilder.DropTable(
                    name: "CharacterSkill");

                migrationBuilder.DropTable(
                    name: "MainItem");

                migrationBuilder.DropTable(
                    name: "MonsterCard");

                migrationBuilder.DropTable(
                    name: "SpellCard");

                migrationBuilder.DropTable(
                    name: "TrapCard");

                migrationBuilder.DropTable(
                    name: "UserDeck");

                migrationBuilder.DropTable(
                    name: "MonsterAttribute");

                migrationBuilder.DropTable(
                    name: "MonsterCardType");

                migrationBuilder.DropTable(
                    name: "MonsterDeckType");

                migrationBuilder.DropTable(
                    name: "SpellCardType");

                migrationBuilder.DropTable(
                    name: "TrapCardType");

                migrationBuilder.DropTable(
                    name: "Character");

                migrationBuilder.DropTable(
                    name: "Skill");

                migrationBuilder.DropTable(
                    name: "User");

                migrationBuilder.DropTable(
                    name: "Image");
            }
        }
public分部类InitialCreate:迁移
{
受保护的覆盖作废(MigrationBuilder MigrationBuilder)
{
migrationBuilder.CreateTable(
名称:“图像”,
列:表=>new
{
Id=table.Column(类型:“int”,可为空:false)
.Annotation(“SqlServer:Identity”、“1,1”),
位置=table.Column(类型:“nvarchar(max)”,可为空:true),
ContentType=table.Column(类型:“nvarchar(max)”,可为null:true),
FileName=table.Column(类型:“nvarchar(max)”,可为null:true),
Size=table.Column(类型:“int”,可为空:false)
},
约束:表=>
{
表.PrimaryKey(“PK_图像”,x=>x.Id);
});
migrationBuilder.CreateTable(
名称:“怪物属性”,
列:表=>new
{
Id=table.Column(类型:“int”,可为空:false)
.Annotation(“SqlServer:Identity”、“1,1”),
AttributeName=table.Column(类型:“nvarchar(max)”,可空:true)
},
约束:表=>
{
表.PrimaryKey(“PK_属性”,x=>x.Id);
});
migrationBuilder.CreateTable(
名称:“MonsterCardType”,
列:表=>new
{
Id=table.Column(类型:“int”,可为空:false)
.Annotation(“SqlServer:Identity”、“1,1”),
TypeName=table.Column(类型:“nvarchar(max)”,可为空:true)
},
约束:表=>
{
表.PrimaryKey(“PK_类型”,x=>x.Id);
});
migrationBuilder.CreateTable(
名称:“怪物类型”,
列:表=>new
{
Id=table.Column(类型:“int”,可为空:false)
.Annotation(“SqlServer:Identity”、“1,1”),
TypeName=table.Column(类型:“nvarchar(max)”,可为空:true)
},
约束:表=>
{
表.PrimaryKey(“PK_类型”,x=>x.Id);
});
migrationBuilder.CreateTable(
名称:“技能”,
列:表=>new
{
Id=table.Column(类型:“int”,可为空:false)
.Annotation(“SqlServer:Identity”、“1,1”),
Name=table.Column(类型:“nvarchar(max)”,可为空:true),
Effect=table.Column(类型:“nvarchar(max)”,可为空:true)
},
约束:表=>