集合参数 'foreignKeyPropertyNames' 必须包含至少一个元素

The collection argument 'foreignKeyPropertyNames' must contain at least one element

我有两个具有特定属性的模型:

public class Issue {
    public int Id { get; set; } 
}

public class Action {
    public int Id { get; set; } 
}

这是最后一个工作代码。然后因为我忘记将 Issue 作为外键 属性 添加到 Action 中,所以它变成了:

public class Action {
    public int Id { get; set; } 
    public Issue Issue { get; set; }
    public int IssueId { get; set; }
}

构建的解决方案、创建的向上迁移方法和 ef 更新数据库失败,出现以下错误:

Applying migration '20180220102738_Action.issue'. Failed executing DbCommand (20ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] ALTER TABLE [Actions] ADD CONSTRAINT [FK_Actions_Issues_IssueId] FOREIGN KEY ([IssueId]) REFERENCES [Issues] ([Id]) ON DELETE CASCADE; System.Data.SqlClient.SqlException (0x80131904): Introducing FOREIGN KEY constraint 'FK_Actions_Issues_IssueId' on table 'Actions' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.

然后我尝试将 onDelete: ReferentialAction.Cascade 更改为 onDelete: ReferentialAction.SetNull 或其他任何东西,但没有任何效果,顺便说一句,我不明白它可能是什么问题,这将是第三个table.

上的外键

我的下一步是删除上次迁移,但它开始抱怨以下内容:

System.ArgumentException: The collection argument 'foreignKeyPropertyNames' must contain at least one element. at Microsoft.EntityFrameworkCore.Utilities.Check.NotEmpty[T](IReadOnlyList1 value, String parameterName) at Microsoft.EntityFrameworkCore.Metadata.Builders.ReferenceCollectionBuilder2.HasForeignKey(String[] foreignKeyPropertyNames) at ISSupport.Models.ISSupportContext.<>c.b__69_7(EntityTypeBuilder`1 b) in

我可以回滚到上次提交,但我不知道我做了什么以及在下一轮我应该避免什么。 Google 没有帮助解决这个错误。 .NET 核心 2.0 英孚核心 2.0 Sql 服务器 13.0.1742

更新 我不得不回滚并再次添加外键。它再次抱怨多个级联路径,现在我在迁移 Up() 方法中将其更改为 onDelete: ReferentialAction.NoAction 和 运行 更新成功。我不知道我之前有什么 f*#!d,仍然需要解释为什么我必须设置 ReferentialAction.NoAction

这是你必须做的:

public class Issue
{
    public int Id { get; set; }
}

public class Action
{
    public int Id { get; set; }

    [ForeignKey("IssueId")]
    public Issue Issue { get; set; }
    public int IssueId { get; set; }
}

您必须定义外键 属性。

在迁移 Up() 方法中,我必须将外键 ReferentialAction 切换为 onDelete: ReferentialAction.NoAction