我有两个型号
public class ContractType
{
public Guid ContractTypeId { get; set; }
public string Name { get; set; }
}
public class JobPost : BasePost
{
public ContractType ContractType { get; set; }
public Guid ContractTypeId { get; set; }
}
正如您所看到的,ContractTypeId
是JobPost
表中的外键。
然后,我使用代码优先将它们更新到数据库。
但我刚决定int
代替ContractTypeId
而不是Guid
。所以我只是将ContractTypeId
的数据类型更改为int
并添加了迁移。两个表都没有数据。这就是我得到的
public override void Up()
{
DropForeignKey("dbo.JobPosts", "ContractTypeId", "dbo.ContractTypes");
DropIndex("dbo.JobPosts", new[] { "ContractTypeId" });
DropPrimaryKey("dbo.ContractTypes");
AlterColumn("dbo.ContractTypes", "ContractTypeId", c => c.Int(nullable: false, identity: true));
AlterColumn("dbo.JobPosts", "ContractTypeId", c => c.Int(nullable: false));
AddPrimaryKey("dbo.ContractTypes", "ContractTypeId");
CreateIndex("dbo.JobPosts", "ContractTypeId");
AddForeignKey("dbo.JobPosts", "ContractTypeId", "dbo.ContractTypes", "ContractTypeId", cascadeDelete: true);
}
public override void Down()
{
DropForeignKey("dbo.JobPosts", "ContractTypeId", "dbo.ContractTypes");
DropIndex("dbo.JobPosts", new[] { "ContractTypeId" });
DropPrimaryKey("dbo.ContractTypes");
AlterColumn("dbo.JobPosts", "ContractTypeId", c => c.Guid(nullable: false));
AlterColumn("dbo.ContractTypes", "ContractTypeId", c => c.Guid(nullable: false));
AddPrimaryKey("dbo.ContractTypes", "ContractTypeId");
CreateIndex("dbo.JobPosts", "ContractTypeId");
AddForeignKey("dbo.JobPosts", "ContractTypeId", "dbo.ContractTypes", "ContractTypeId", cascadeDelete: true);
}
但是,当我使用update-database
更新数据库时,出现错误:
错误号码:206,状态:2,等级:16
不兼容
操作数类型冲突:uniqueidentifier与int
我知道因为我还没有为表格填充任何数据,所以我可以简单地删除并重新创建模型并更新它们。
但我想知道如何解决这个问题或如何更改ContractTypeId
的数据类型。
谢谢你们
答案 0 :(得分:0)
public override void Up()
{
DropForeignKey("dbo.JobPosts", "ContractTypeId", "dbo.ContractTypes");
DropIndex("dbo.JobPosts", new[] { "ContractTypeId" });
DropPrimaryKey("dbo.ContractTypes");
-- below line added manaully
DropColumn("dbo.ContractTypes", "ContractTypeId");
-- below line added manaully
AddColumn("dbo.ContractTypes", "ContractTypeId", c => c.Int(nullable: false, identity: true));
-- below line added manaully
DropColumn("dbo.JobPosts", "ContractTypeId");
-- below line added manaully
AddColumn("dbo.JobPosts", "ContractTypeId", c => c.Int(nullable: false));
AddPrimaryKey("dbo.ContractTypes", "ContractTypeId");
CreateIndex("dbo.JobPosts", "ContractTypeId");
AddForeignKey("dbo.JobPosts", "ContractTypeId", "dbo.ContractTypes", "ContractTypeId", cascadeDelete: true);
}