集合参数 '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.ReferenceCollectionBuilder
2.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
我有两个具有特定属性的模型:
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](IReadOnlyList
1 value, String parameterName) at Microsoft.EntityFrameworkCore.Metadata.Builders.ReferenceCollectionBuilder
2.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