Sql server 如何先更改EF代码中外键的数据类型
我有两种型号Sql server 如何先更改EF代码中外键的数据类型,sql-server,entity-framework,code-first,Sql Server,Entity Framework,Code First,我有两种型号 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; }
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);
}
但是,当我使用updatedatabase
更新数据库时,我得到一个错误:
错误编号:206,状态:2,类别:16操作数类型冲突:uniqueidentifier与int不兼容 我知道,因为我还没有为表填充任何数据,所以我可以简单地删除和重新创建模型并更新它们 但我想知道如何解决这个问题,或者如何更改
ContractTypeId
的数据类型
谢谢大家给你们。因为您没有好的数据:)棘手的是首先删除列,然后再次添加它们。因为我们不能将uniquiueidentifier更改为int直接阅读前面提到的文章 . 因此,我采用了迁移:)可能对其他喜欢先从EF代码开始迁移的人有帮助
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);
}
给你。因为您没有好的数据:)棘手的是首先删除列,然后再次添加它们。因为我们不能将uniquiueidentifier更改为int直接阅读前面提到的文章 . 因此,我采用了迁移:)可能对其他喜欢先从EF代码开始迁移的人有帮助
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);
}
添加了我在本地EF 6.1.3上测试的答案,重试几次后就成功了:)顺便提一句,这个问题很好,对那些喜欢先在EF代码中测试的人很有帮助。@YashveerSingh谢谢你的回答,我今晚就试试!!好的,没问题,我希望它能起作用:)添加了我在本地EF 6.1.3上测试的答案,重试几次后它就起作用了:)顺便提一句,这个问题很好,对那些喜欢先在EF代码中进行测试的人很有帮助。@YashveerSingh谢谢你的回复,我今晚会试试!!好的,没问题,我希望它能工作:)