实体框架.net:"Name值应该是有效的导航属性名称."

And*_*ipe 6 c# asp.net entity-framework foreign-keys

你好我正在开始一个ASP.Net的项目,我正在关注微软的训练营.我试图向我发布的api做一个REST请求,然后我得到了下一个例外:

类型为"PlataformaTest.Models.AnswerModel"的属性"QuestionId"上的ForeignKeyAttribute无效.在依赖类型'PlataformaTest.Models.AnswerModel'上找不到导航属性'OptionModel'.Name值应该是有效的导航属性名称.","exceptionType":"System.InvalidOperationException"

顺便说一下,我没有逐字逐句地遵循训练练习,我改变了一些名字,所以,试图找出从零开始的所有过程.

任何帮助和指导都非常感谢.谢谢.

And*_*ipe 27

好.我已经解决了这个问题.万一有人有同样的问题,这里是问题和答案:

我有我的实体,如:

namespace PlataformaTest.Models
{
    public class AnswerModel
    {
        public int Id { get; set; }

        public string UserId { get; set; }

        [ForeignKey("OptionModel"), Column(Order = 0)]
        public int QuestionId { get; set; }

        [ForeignKey("OptionModel"), Column(Order = 1)]
        public int OptionId { get; set; }

        [JsonIgnore]
        public virtual OptionModel OptionModelEx { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我发现了那个

ForeignKey("OptionModel") 
Run Code Online (Sandbox Code Playgroud)

必须具有"虚拟"变量的相同名称.像这样:

namespace PlataformaTest.Models
{
    public class AnswerModel
    {
        public int Id { get; set; }

        public string UserId { get; set; }

        [ForeignKey("OptionModel"), Column(Order = 0)]
        public int QuestionId { get; set; }

        [ForeignKey("OptionModel"), Column(Order = 1)]
        public int OptionId { get; set; }

        [JsonIgnore]
        public virtual OptionModel OptionModel { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为它必须有Class的名称,但事实并非如此.它查找要映射实体的外键的对象的名称.

  • 向上1表示导航是"虚拟"引用. (2认同)