C# ';无效的列名';从Asp.net core 2.0升级到2.1后出错

C# ';无效的列名';从Asp.net core 2.0升级到2.1后出错,c#,sql,asp.net-core,C#,Sql,Asp.net Core,我最近重新访问了我的网站,不得不从ASP.NETMVC(DBF)Core2.0升级到2.1。 由于这样做,我得到以下错误 SqlException:列名“MovietTitleId”无效。列名“MovietTitleId”无效 然而,在我的代码或db的任何部分中都没有这样的字段“MovieTitleId” 只有当站点访问“多表”场景时才会发生错误 (在db中设置了与FKs..Movie>场景的一对多关系) 这是情景课 public partial class Scene {

我最近重新访问了我的网站,不得不从ASP.NETMVC(DBF)Core2.0升级到2.1。 由于这样做,我得到以下错误

SqlException:列名“MovietTitleId”无效。列名“MovietTitleId”无效

然而,在我的代码或db的任何部分中都没有这样的字段“MovieTitleId”

只有当站点访问“多表”场景时才会发生错误 (在db中设置了与FKs..Movie>场景的一对多关系)

这是情景课

public partial class Scene
    {
        [Key]
        public int SceneId { get; set; }
        [ForeignKey("TitleId")]
        public int? TitleId { get; set; } // foreign key from Movie
        [ForeignKey("LocationSiteId")]
        public int? LocationSiteId { get; set; }
        [ForeignKey("LocationAliasId")]
        public int? LocationAliasId { get; set; }
        public string Notes { get; set; }
        public int? SceneOrder { get; set; }
        public string TitleList { get; set; }
        public LocationAlias LocationAlias { get; set; }
        public LocationSite LocationSite { get; set; }
        public Movie Movie { get; set; }
    } 
这是一个电影类,在“一边”调用典型的“主/细节”类型网页上的场景

public partial class Movie
    {
        public Movie()
        {
            Scenes = new HashSet<Scene>();
        }

        [Key]
        public int TitleId { get; set; }
        [Required]
        public string Title { get; set; }
        [DisplayName("Title")]
        public string ParsedTitle { get; set; }
        [DisplayName("Year")]
        public int? TitleYear { get; set; }        
        public string ImdbUrl { get; set; }
        public string Summary { get; set; }
        public bool? ExcludeTitle { get; set; }
        public bool? Widescreen { get; set; }


         [DisplayName("Title")]
        public override string ToString() 
        {
            return Title + " (" + TitleYear + ")";
           
        }

       public ICollection<Scene> Scenes { get; set; }
        
    }
在我升级到Core2.1之前,一切都很好。 我甚至不记得有一个叫做“MovietitleId”的字段,实际上是“TitleId”。
错误消息是否以某种方式连接了模型“Movie”和列“TitleId”?

尝试为外键添加virtual关键字。此外,ForeignKey数据注释应该位于您声明虚拟财产的属性上,如下所示。所以应该是这样的:

Scene.cs

public int TitleId { get; set; }
[ForeignKey("TitleId")
public virtual Movie Movie { get; set; }
为什么是虚拟的?

如果您将虚拟财产声明为虚拟财产,则在查询主对象时不会立即加载虚拟财产(默认情况下)。只有在您尝试访问数据库时,才会从数据库中检索到它。这称为延迟加载

如果您想详细了解为什么要使用virtual,可以访问以下链接:


希望这有帮助。

您的
视图中是否有任何东西会抛出此消息?我已经有一段时间没有编写MVC代码了。如果可能的话,请显示共享您的模型快照!这就解决了问题。非常感谢。我会仔细阅读你的链接。Cheers@KevinM我很高兴这有帮助:)
public int TitleId { get; set; }
[ForeignKey("TitleId")
public virtual Movie Movie { get; set; }