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