C# 无效的列名。该名称从未在代码中实现
我有一个简单的程序,我正在设置用于单元测试。出于某种原因,Entity Framework对我大喊大叫,并出现以下错误:列名“Author\u Id”无效 问题是我没有名为Author_Id的列,不在项目中,不在模型中,也不在数据库的表中。出于某种原因,它将_Id部分添加到我搜索的内容的末尾 示例:如果我将其设置为“搜索作者”,我将获得作者Id。AuthorId变为AuthorId Id,Authorit Id变为Authorit Id 我不知道我做错了什么。我搜索了整个解决方案,但什么也没找到 它告诉我我的错误在这里:C# 无效的列名。该名称从未在代码中实现,c#,asp.net,asp.net-mvc,entity-framework,linq,C#,Asp.net,Asp.net Mvc,Entity Framework,Linq,我有一个简单的程序,我正在设置用于单元测试。出于某种原因,Entity Framework对我大喊大叫,并出现以下错误:列名“Author\u Id”无效 问题是我没有名为Author_Id的列,不在项目中,不在模型中,也不在数据库的表中。出于某种原因,它将_Id部分添加到我搜索的内容的末尾 示例:如果我将其设置为“搜索作者”,我将获得作者Id。AuthorId变为AuthorId Id,Authorit Id变为Authorit Id 我不知道我做错了什么。我搜索了整个解决方案,但什么也没找到
public ViewResult Index()
{
var books = db.Books.Include(b=>b.AuthorId);
ViewBag.AlbumCount = books.Count();
return View(books.OrderBy(b => b.Author.Id).ToList());
//^^^^ Return is supposed to be doing the error. Fetching Name or
}
我的作者模型如下:
public class Author
{
[Key]
public int Id { get; set; }
[Display(Name = "Author")]
public string Name { get; set; }
[Display(Name = "Date of birth")]
public DateTime? DateOfBirth { get; set; }
[Display(Name = "Date of death")]
public DateTime? DateOfDeath { get; set; }
public ICollection<Book> Books { get; set; }
}
public class Book
{
[Key]
public int Id { get; set; }
[Display(Name = "Select author")]
public Author AuthorId { get; set; }
[Required]
public string Title { get; set; }
[Display(Name = "Publication date")]
public DateTime? PublicationDate { get; set; }
public float? Edition { get; set; }
public Author Author { get; set; }
}
Include方法用于加载相关实体,而不是像authord这样的单列。改为包含导航属性
替换
var books = db.Books.Include(b => b.AuthorId);
借
注意:authorId仍然被加载,因为它只是books表中的一列。Include方法用于加载相关实体,而不是像authorId这样的单列。改为包含导航属性
替换
var books = db.Books.Include(b => b.AuthorId);
借
注意:authorId仍然被加载,因为它只是books表中的一列。您有两个导航属性,而不是一个导航属性和一个外键属性 这不应该:
public class Book
{
[Key]
public int Id { get; set; }
[Display(Name = "Select author")]
public Author AuthorId { get; set; }
[Required]
public string Title { get; set; }
[Display(Name = "Publication date")]
public DateTime? PublicationDate { get; set; }
public float? Edition { get; set; }
public Author Author { get; set; }
}
是
?您有两个导航属性,而不是一个导航属性和一个外键属性 这不应该:
public class Book
{
[Key]
public int Id { get; set; }
[Display(Name = "Select author")]
public Author AuthorId { get; set; }
[Required]
public string Title { get; set; }
[Display(Name = "Publication date")]
public DateTime? PublicationDate { get; set; }
public float? Edition { get; set; }
public Author Author { get; set; }
}
是
对不起,伙计们。我试图同时使用代码和数据库。我不得不删除旧表,并通过迁移重新创建它们。然后我还有两个不同的DBContext。一个代表身份,一个代表我。而且关系都搞砸了。不管怎样,如果有人有类似的问题,检查你的关系。并首先使用数据库或代码。别像我那样把它们混在一起。对不起,伙计们。我试图同时使用代码和数据库。我不得不删除旧表,并通过迁移重新创建它们。然后我还有两个不同的DBContext。一个代表身份,一个代表我。而且关系都搞砸了。不管怎样,如果有人有类似的问题,检查你的关系。并首先使用数据库或代码。不要像我那样混合使用它们。你也可以共享Fluent Api吗?我想它是在图书模型中寻找字段作者Id,因为看起来你试图将其用作外键。注释掉book中的Author属性和AuthorId属性。我敢打赌它能用。@Dylan,但它应该是外键。你应该用Fluent Api或注释配置导航属性。我看不到ForeignKey注释。所以,请检查ModelCreating方法的上下文。@AlexKudryashev此模型不是多对多关系,因此根据设计,此模型只支持每本书一位作者。您是否也共享Fluent Api?我认为它在书模型中查找字段author_Id,因为它看起来像您试图将其用作外键。注释掉book中的Author属性和AuthorId属性。我敢打赌它能用。@Dylan,但它应该是外键。你应该用Fluent Api或注释配置导航属性。我看不到ForeignKey注释。因此,请检查ModelCreating方法的上下文。@AlexKudryashev此模型不是多对多关系,因此根据设计,此模型每本书只支持一位作者。这将是最接近问题解决方案的模型。我也基本上没有一个有效的db映射。很多错误都是抓不到的!我没有看到错误类型的AuthorId Author而不是int。这将是最接近问题解决方案的。我也基本上没有一个有效的db映射。很多错误都是抓不到的!我没有看到错误类型的AuthorId Author而不是int。