当前位置: 首页 > 知识库问答 >
问题:

如何将带有外键的实体框架迁移应用到带有数据的表

许沛
2023-03-14

我必须将昨天添加的一位同事的迁移应用到我的本地数据库:

public partial class addDocumentFK : DbMigration
{
    public override void Up()
    {
        CreateIndex("dbo.DocumentHierarchy", "DocumentId");
        AddForeignKey("dbo.DocumentHierarchy", "DocumentId", "dbo.Document", "Id");
    }
    
    public override void Down()
    {
        DropForeignKey("dbo.DocumentHierarchy", "DocumentId", "dbo.Document");
        DropIndex("dbo.DocumentHierarchy", new[] { "DocumentId" });
    }
}

问题是我的文档表中已经有数据并且迁移失败:

The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_dbo.DocumentHierarchy_dbo.Document_DocumentId". The conflict occurred in database "dgc_db", table "dbo.Document", column 'Id'.

有什么方法可以避免这种冲突,而不必清除< code>Document表中的所有数据?

共有1个答案

易祯
2023-03-14

可能有两种情况:

  1. 可以从文档层次结构表中找不到其关系的文档表中删除数据
  2. 您可以将具有正确主键的数据添加到“文档层次结构”表中,以便关系正确

执行上述任一情况后,您将能够通过迁移添加外键

 类似资料:
  • MongoDB从3.2转储,用3.4还原,错误索引保存=null 在我的情况下,手工重新创建索引不是一个选项,我需要一个脚本来自动创建索引,以便以后迁移我的生产环境。 到目前为止我所尝试的: 正确的进行方式是什么?

  • 我正在给我的Azure API应用程序添加一个SQL数据库。我有一个空的SQL数据库,我通过portal.azure.com单独创建。我的问题是我不知道如何设置连接字符串,以便我的应用程序使用Azure数据库。 我已经阅读了代码优先迁移的文章,但仍停留在部署阶段。我无法在项目中的任何文件中看到任何连接配置。 如何将连接字符串设置为在 Azure 中部署应用时使用? 更多信息: 准确地说,我可以看到

  • 问题内容: 这可能是太多基于意见的问题,但这里有: 我发现了与实体框架和数据库迁移有关的一个有趣的怪癖。看来,每当我们创建外键时,它也会在该列上创建索引。 我读了一个SO问题:实体框架代码第一个外键添加索引,每个人似乎都说这是一个很好的,有效的主意,但我不知道怎么做。索引列是非常特定于环境的。例如,EF索引了我的表上几乎从来没有(〜1%)用于搜索的FK,并且也索引了源表,这意味着即使我加入其他表,

  • 我有两个具有@ManyToOne关系的实体类,如下所示。 我是Spring Data JPA的新手,所以这可能是一个非常基本的错误。

  • 我的迁移搞砸了,我在初始迁移时使用了,但现在我想删除所有的迁移,并从具有所有逻辑的初始迁移开始。 当我删除文件夹中的迁移并尝试时,它不会生成完整的文件(它是空的--因为自从上次(现在已删除)迁移以来,我没有做任何更改)。 是否有Disable-Migrations命令,以便我可以重新运行?

  • 我有一个带有如下所示的文件: 我们过去常常使用注释来读取这些值,因此字符串与“子设置”的前缀相同。 我的任务是清理这个应用程序,我想使用与属性文件内容相匹配的大型配置对象来使用,以使代码更易于使用。 我认为configuration类的结构应该是这样的(Kotlin示例,但这并不重要): 请注意,也用于决定注册哪个bean: 如何设置此配置(无需重写以消除此应用程序所有实例的命名问题)?