1

我在数据库中有一个表已经有一些数据,例如这是表

public class Foo {
    public int Id {get; set;}
    public string FooTypeId {get; set;}
}

FooTypeId不是FK,我只是在其中存储字符串,例如'TABLE','CHAIR'..

现在我想创建一个新的表来保存 的值FooType,因此FooTypeId成为外键。

所以我做了这样的:

public class Foo {
    public int Id {get; set; }
    public string FooTypeId {get; set; }
    public virtual FooType {get; set; }
}

public class FooType {
    public string Id {get; set; }
    public string Name {get; set; }
}

没关系。但是,我已经在Foo表('chair','table',..)中有现有数据,并且我在启动时添加了新数据。所以它崩溃了。

问题是:
在这种情况下,我如何忽略现有数据 WITH Entity Framework?严格使用实体框架。

4

2 回答 2

1

假设您正在使用迁移,您可以编辑生成的迁移“UP”方法。在这种方法中,您将有一些操作来在 Foo 中创建外键。可能是对MigrationBuilder.AddForeignKey的调用。在调用此方法之前,您可以使用MigrationBuilder.InsertData在 FooType 中插入所需的值,这样外键创建就不会失败。

与此类似的东西:

//Here should be code to create FooType table
modelBuilder.InsertData("FooType", {"Id", "Name"}, {"Varchar", "Varchar"}, {{ Id="T", Name="Table" }, { Id="C", Name="Chair" }}, "dbo");
migrationBuilderBuilder.AddForeignKey("FK_Foo_FooType", "Foo", "FooTypeId", "FooType", "dbo", "dbo", "Id", ReferentialAction.Cascade, ReferentialAction.Cascade);
于 2021-03-04T09:16:09.020 回答
0

您不能“忽略”现有数据,您必须允许它。

  1. 创建 FooType 中的所有行(包括 Foo 引用的任何数据)。
  2. 执行迁移
  3. 利润
于 2021-03-04T08:28:17.813 回答