猿问

在不删除数据的情况下在Entity Framework Core中重命名外键

我有两个模型类:


public class Survey

{

    public int SurveyId { get; set; }

    public string Name { get; set; }

}


public class User

{

    public int UserId { get; set; }


    public int SurveyId { get; set; }

    public Survey Survey { get; set; }

}

我想重命名Survey为StudentSurvey,这样就可以了StudentSurveyId。我相应地更新了模型中的类名和属性,并添加了迁移。


但是,我得到:


ALTER TABLE语句与FOREIGN KEY约束“ FK_User_Surveys_SurveyId”冲突。数据库“ AppName”的表“ dbo.Survey”的列“ SurveyId”中发生了冲突。


我认为它正在尝试删除数据,因为它要求列中的数据(不能为null),所以我看到了该错误。但是我不想删除数据。我该如何重命名?


至尊宝的传说
浏览 177回答 2
2回答

慕妹3146593

该文档建议使用MigrationBuilder.RenameColumn()。还有RenameIndex(),RenameTable()和存储过程“ sp_rename ”(SQL Server中)重命名外键。例如:migrationBuilder.Sql($"EXEC sp_rename 'dbo.{oldName}', '{newName}'");使用SQL Server Management Studio中的数据库脚本工具(在rt上单击DB | Tasks | Generate Script ...)可以生成具有和不具有EF迁移自定义项的可比较的架构脚本。然后,您将知道EF命名已保留。编辑:添加了'EXEC ...'以支持生成独立的T-SQL脚本
随时随地看视频慕课网APP
我要回答