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