我正在使用Visual Studio 2017社区中的Entity Framework核心和程序包管理器控制台通过add-migration
和update-database
命令进行迁移,以将更改从我的模型应用到数据库。
我正在尝试使用update-database
命令进行迁移,并且它始终因错误而失败:
“ALTER TABLE DROP COLUMN失败,因为'UserIDUser'是表'UserGroups'中唯一的数据列。一个表必须至少有一个数据列。”
我不知道该如何处理,现在我无法应用我在应用程序中的模型代码中所做的任何更改。我已经用几次相同的方式对数据库进行了一些更新,直到现在一切都很好。我在模型中所做的是从UserGroup
实体(IDUserGroup
具体)删除一个字段,但我不知道是我的麻烦的原因。
我该如何修复?
这是我之前迁移的代码(迁移设计器文件)已成功更新到数据库,另一个我无法更新到数据库:
上一个update-database
(成功):
[DbContext(typeof(DBContext))]
[Migration("20170726113245_Privatemigration")]
partial class Privatemigration
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
modelBuilder
.HasAnnotation("ProductVersion", "1.1.2")
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
modelBuilder.Entity("Server.Models.Group", b =>
{
b.Property<int>("IDGroup")
.ValueGeneratedOnAdd();
b.Property<string>("Description");
b.Property<string>("GroupName")
.IsRequired();
b.HasKey("IDGroup");
b.ToTable("Groups");
});
modelBuilder.Entity("Server.Models.User", b =>
{
b.Property<int>("IDUser")
.ValueGeneratedOnAdd();
b.Property<string>("Forename")
.IsRequired();
b.HasKey("IDUser");
b.ToTable("Users");
});
modelBuilder.Entity("Server.Models.UserGroup", b =>
{
b.Property<int>("IDUserGroup")
.ValueGeneratedOnAdd();
b.Property<int?>("GroupIDGroup");
b.Property<int?>("UserIDUser");
b.HasKey("IDUserGroup");
b.HasIndex("GroupIDGroup");
b.HasIndex("UserIDUser");
b.ToTable("UserGroups");
});
modelBuilder.Entity("Server.Models.UserGroup", b =>
{
b.HasOne("Server.Models.Group", "Group")
.WithMany("Groups")
.HasForeignKey("GroupIDGroup");
b.HasOne("Server.Models.User", "User")
.WithMany("UserGroups")
.HasForeignKey("UserIDUser");
});
}
}
后续update-database
(失败):
[DbContext(typeof(DBContext))]
[Migration("20170807142122_PrivateMigration2")]
partial class PrivateMigration2
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
modelBuilder
.HasAnnotation("ProductVersion", "1.1.2")
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
modelBuilder.Entity("Server.Models.Group", b =>
{
b.Property<int>("IDGroup")
.ValueGeneratedOnAdd();
b.Property<string>("Description");
b.Property<string>("GroupName")
.IsRequired();
b.HasKey("IDGroup");
b.ToTable("Group");
});
modelBuilder.Entity("Server.Models.User", b =>
{
b.Property<int>("IDUser")
.ValueGeneratedOnAdd();
b.Property<string>("Forename")
.IsRequired();
b.HasKey("IDUser");
b.ToTable("Users");
});
modelBuilder.Entity("Server.Models.UserGroup", b =>
{
b.Property<int>("IDUser");
b.Property<int>("IDGroup");
b.HasKey("IDUser", "IDGroup");
b.HasIndex("IDGroup");
b.ToTable("UserGroup");
});
modelBuilder.Entity("Server.Models.UserGroup", b =>
{
b.HasOne("Server.Models.Group", "Group")
.WithMany("UsersGroups")
.HasForeignKey("IDGroup")
.OnDelete(DeleteBehavior.Cascade);
b.HasOne("Server.Models.User", "User")
.WithMany("UsersGroups")
.HasForeignKey("IDUser")
.OnDelete(DeleteBehavior.Cascade);
});
}
}