【发布时间】:2020-08-27 22:30:42
【问题描述】:
我正在处理一个现有项目,该项目的数据库似乎是通过 SQL Server \ SSMS 手动创建的数据。
在项目的另一端,其他人已经创建了一个种子数据\配置文件。这是我被引入解决方案并创建了一个新的迁移文件的地方,发现我收到错误:
主键约束“PK_AnswerTypes”。无法在对象“forms.AnswerTypes”中插入重复键。重复键值为 (1)
查看 Azure Pipelines,这似乎是自创建配置文件以来的一个问题。
配置代码是
public void Configure(EntityTypeBuilder<FieldType> builder)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.ToTable("FieldTypes", FormEngineSchemas.Forms);
// TODO: convert to enum
builder.HasData(
new FieldType
{
FieldTypeId = 1,
FieldTypes = "NUMBER"
},
new FieldType
{
FieldTypeId = 2,
FieldTypes = "DROPDOWN"
},
new FieldType
{
FieldTypeId = 3,
FieldTypes = "DATE"
});
}
上标是
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.InsertData(
schema: "forms",
table: "AnswerTypes",
columns: new[] { "AnswerTypeId", "AnswerTypes" },
values: new object[,]
{
{ 1, "Range" },
{ 2, "Length" },
{ 3, "regex" }
});
}
如果有人能帮助建议我如何通过这个,我将不胜感激,因为我不想删除数据库中的现有数据,因为我不想冒潜在的孤立记录或删除失败的风险。
我环顾四周,这是我能看到的最接近我的问题的地方
https://github.com/dotnet/efcore/issues/12324
看这里好像播种已经正确完成了
https://www.learnentityframeworkcore.com/migrations/seeding
所以,我的问题是;
如果数据库从一开始就全部创建并播种并且一切正常,那么所有后续迁移都可以正常工作,并且不会再次尝试播种。
解决此问题的最佳方法是什么。
有什么我可能错过或没有考虑的吗?
谢谢
西蒙
【问题讨论】:
标签: c# ef-code-first seeding ef-core-3.0