'invalid column name'从asp.net core 2.0升级到2.1后出错

z9ju0rcb  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(337)

我最近重新访问了我的网站,不得不从asp.NETMVC(dbf)Core2.0升级到2.1。由于这样做,我得到以下错误。。。
sqlexception:列名“movietitleid”无效。列名“movietitleid”无效。
然而,在我的代码或数据库的任何部分中都没有这样的字段“movietitleid”。
只有当站点访问“多表”场景时才会发生错误(数据库中设置了与fks的一对多关系)。。电影>场景)
这是场景类。。

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

    }

错误发生在moviescontroller.cs中。。。

Movie movie = _context.Movies.Find(id);
            ViewBag.Scenes = _context.Scenes
                .Where(s => s.TitleId == id)
                .Include(s => s.LocationSite)
                .Include(s => s.LocationSite.LocationPlace)
                .OrderBy(s => s.SceneOrder).ToList();

在我升级到核心2.1之前,一切都很正常。我甚至不记得有一个叫做“movietitleid”的字段,实际上是“titleid”。错误消息是否以某种方式连接了模型“movie”和列“titleid”?

ehxuflar

ehxuflar1#

尝试为外键添加虚拟关键字。另外,foreignkey数据注解应该位于您声明虚拟财产的属性上,如下所示。所以应该是这样的:
场景.cs

public int TitleId { get; set; }
[ForeignKey("TitleId")
public virtual Movie Movie { get; set; }

为什么是虚拟的?
如果您声明您的虚拟属性,那么在查询主对象时,您的虚拟属性(默认情况下)不会立即加载。只有当您尝试访问它时,才会从数据库中检索它。这称为延迟加载。
如果您想详细了解为什么要使用virtual,可以访问以下链接:为什么ef代码中的外键首先标记为virtual?
希望这有帮助。

相关问题