Entity framework 包含EF的列名无效

Entity framework 包含EF的列名无效,entity-framework,Entity Framework,我用一些额外的列修改了数据库中的UserProfile表,然后修改了UserProfile类以反映它们: [Table("UserProfile")] public class UserProfile { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int UserId { get; set; } public string UserName { get;

我用一些额外的列修改了数据库中的UserProfile表,然后修改了UserProfile类以反映它们:

[Table("UserProfile")]
public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string Firstname { get; set; }
    public string Surname { get; set; }
    public string School { get; set; }
}
很明显,他们是名字、姓氏和学校。出于某种原因,尽管在我尝试通过以下方式加载数据时,注册操作将详细信息保存到所有3个新列中:

var context = new UsersContext();
var user = context.UserProfiles.First(n => n.UserName == model.UserName);
上面说学校是一个无效的名字。我检查它在类和表中都是字符串,所以有点困惑如何调试,帮助

(接OP评论)

<> P>而不是手动操作,您应该考虑使用EF迁移框架——在内部EF功能改变的情况下,有许多好处,并且它更具未来性。
请参阅关于迁移的部分

我不知道这是否是您的问题,但根据您使用的EF版本,EF存储有关在该数据库的(系统)表中生成数据库时使用的实体/上下文版本的元数据。因此,您的手动更改也需要反映在那里。进行这些更改的首选方法是使用。如果不可能简单地更改数据库和类,我确信我使用现有数据库创建了EF CF,而无需迁移。每当我进行更改时,它可能会工作,但您正在对EF的内部工作方式进行假设,并且实现不一定会更改。例如,它用于外键的命名约定。您可以猜测这些,并可能通过应用适当的属性强制EF使用您的模型-但正如我所说的,这并不理想。在您的位置上,我会使用SQL事件探查器,查看EF对Db运行的查询-查看它试图检索的列名(或检查的元数据表)。我已经尝试了迁移,毕竟我希望正确地进行迁移。唯一的问题是Up()再次创建表,而Down()则删除表。这在一开始就很公平,但如果我在以后的阶段进行更改,我不会希望它放弃表格。它还说表已经存在,这意味着它并没有首先删除,我是否遗漏了什么?看看旧的项目,它在这种情况下是有效的,因为在OnModelCreating中我放了:
modelBuilder.Entity().ToTable(“tblSites”)