代码之家  ›  专栏  ›  技术社区  ›  Perrier

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

  •  0
  • Perrier  · 技术社区  · 6 年前

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

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

    这是最后一个工作代码。然后,由于我忘记将Issue作为外键属性添加到操作中,我这样做了,它变成了:

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

    生成的解决方案、创建的迁移方法和ef update数据库失败,错误如下:

    正在应用迁移“20180220102738\u操作”。问题'。执行失败 DbCommand(20ms)[参数=[],命令类型='文本', CommandTimeout=“30”]更改表[操作]添加约束 [FK\U Actions\U Issues\U IssueId]外键([IssueId])引用 删除级联上的[问题]([Id]);系统数据SqlClient。SqlException (0x80131904):引入外键约束 表“Actions”上的“FK\u Actions\u Issues\u IssueId”可能导致周期或 多个级联路径。指定在删除时不执行任何操作或在更新时不执行任何操作 操作,或修改其他外键约束。

    然后我尝试更改onDelete:ReferentialAction。级联到onDelete:引用。SetNull或其他任何东西都不起作用,顺便说一句,我不知道它可能有什么问题,这将是这个表上的第三个外键。

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

    系统ArgumentException:集合参数 “foreignKeyPropertyNames”必须至少包含一个元素。在 微软EntityFrameworkCore。公用事业检查NotEmpty[T](IReadOnlyList 1 value, String parameterName) at Microsoft.EntityFrameworkCore.Metadata.Builders.ReferenceCollectionBuilder 2、HasForeignKey(字符串[]) foreignKeyPropertyNames)位于 ISSupport。模型。IsupportContext<&燃气轮机;c、 b\uu 69\u 7(EntityTypeBuilder'1 b) 在中

    我可以回滚到最后一次提交,但我不知道在下一轮中我做了什么,应该避免什么。谷歌没有帮助解决这个错误。 .NET Core 2.0 EF核心2.0 Sql Server 13.0.1742

    使现代化 我不得不回滚并再次添加外键。它再次抱怨多个级联路径,现在我在migration Up()方法中将其更改为 onDelete: ReferentialAction.NoAction 并成功运行更新。我不知道我吃了什么!我之前已经准备好了,但仍然需要解释为什么我必须设置引用。无行动

    2 回复  |  直到 6 年前
        1
  •  1
  •   pitaridis    6 年前

    这就是你必须做的:

    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; }
    }
    

    您必须定义什么是外键属性。

        2
  •  0
  •   Perrier    6 年前

    在migration Up()方法中,我必须将外键引用切换到 onDelete: ReferentialAction.NoAction