簡體   English   中英

從 Asp.net 核心 2.0 升級到 2.1 后出現“無效的列名”錯誤

[英]'Invalid Column Name' Error After Upgrading from Asp.net core 2.0 to 2.1

我最近重新訪問了我的 web 站點,不得不從 ASP.net MVC (DBF) 核心 2.0 升級到 2.1。 由於這樣做,我收到以下錯誤...

SqlException:列名“MovieTitleId”無效。 列名“MovieTitleId”無效。

然而,在我的代碼或數據庫的任何部分都沒有這樣的字段“MovieTitleId”。

該錯誤僅在站點訪問“多表”場景時發生(在數據庫中與 FK 建立了一對多關系。電影 > 場景)

這是場景 class..

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

這是電影 class ,它在“一側”並在典型的“主/細節”類型 web 頁面上調用場景......

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”。 錯誤消息是否以某種方式連接了 model 'Movie' 和列 'TitleId' ?

嘗試為您的外鍵添加虛擬關鍵字。 此外,ForeignKey Data Annotation 應該在您聲明虛擬屬性的那個屬性上,如下所示。 所以它應該是這樣的:

場景.cs

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

為什么是虛擬的?

如果您將您的屬性聲明為虛擬,則在查詢主 object 時將不會立即加載您的虛擬屬性(默認情況下)。 僅當您嘗試訪問它時才會從數據庫中檢索它。 這稱為延遲加載。

如果您想詳細了解為什么要使用virtual ,可以訪問此鏈接: 為什么 EF Code First 中的外鍵標記為 virtual?

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM