我有一个使用 EF 的 Code First MVC 项目。
有两个表TableA
和TableB
,它们目前具有一对多的关系:
public partial class TableA
{
public TableA()
{
TableBs = new HashSet<TableB>();
}
public int Id { get; set; }
public Virtual ICollection<TableB> TableBs { get; set; }
}
public partial class TableB
{
public int Id { get; set; }
public int TableAId { get; set; }
public virtual TableA TableAs { get; set; }
}
modelBuilder.Entity<TableA>()
.HasMany(e => e.TableBs)
.WithRequired(e => e.TableA)
.HasForeignKey(e => e.TableAId);
我试图改变TableA
给它一个一对零或一的关系:
public partial class TableA
{
public TableA() { }
public int Id { get; set; }
public int? TableBId { get; set; }
public virtual TableB TableB { get; set; }
}
TableB
保持不变,我改变了我的OnModelCreating
样子:
modelBuilder.Entity<TableA>()
.HasOptional(e => e.TableBs);
modelBuilder.Entity<TableB>()
.HasRequired(e => e.TableAs);
问题是生成的迁移是出乎意料的——对我来说是出乎意料的,因为显然我不知道自己在做什么。它不是添加 FK 并添加列,而是尝试重命名列。这是我的迁移:
public override void Up()
{
DropForeignKey("dbo.TableA", "TableBId", "dbo.TableB");
DropIndex("dbo.TableA", new[] { "TableBId" });
DropColumn("dbo.TableB", "Id");
RenameColumn(table: "dbo.TableB", name: "TableBId", newName: "Id");
DropPrimaryKey("dbo.TableB");
AlterColumn("dbo.TableA", "TableBId", c => c.Int());
AlterColumn("dbo.TableB", "Id", c => c.Int(nullable: false));
AlterColumn("dbo.TableB", "TableAId", c => c.Int(nullable: false));
AddPrimaryKey("dbo.TableB", "Id");
CreateIndex("dbo.TableB", "Id");
}
我不明白为什么它试图重命名一个不存在的列,我的新 FK 在哪里?