当我改变asp.net mvc模型属性时,不能访问数据库
本文关键字:不能 访问 数据库 属性 模型 改变 asp net mvc | 更新日期: 2023-09-27 18:17:12
我正在开发一个项目,我对我的模型进行了更改,现在每当我运行我的项目时,我都会得到我所更改的所有模型的这些错误:
for my person model:
列名'Location'无效。
列名'EmailAddress'无效。
列名'PlaceOfBirth'无效。
for my guardian model:
无效的对象名称"Admission.Guardian"。
这是我的DbContext模型:
public class SchoolInfoEntities: DbContext
{
public DbSet<Students> Student { get; set; }
public DbSet<Class> Classes { get; set; }
public DbSet<Guardian> Guardians { get; set; }
public DbSet<Staff> Staffs { get; set; }
public DbSet<Subject> Subjects { get; set; }
public DbSet<Department> Departments { get; set; }
public DbSet<SchoolDetails> SchoolDetails { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Students>()
.HasMany(t => t.Guardians)
.WithMany(t => t.Students)
.Map(m =>
{
m.ToTable("Admission.StudentGuardian");
m.MapLeftKey("StudentId");
m.MapRightKey("GuardianId");
});
modelBuilder.Entity<Staff>()
.HasMany(t => t.Subjects)
.WithMany(t => t.Staffs)
.Map(m =>
{
m.ToTable("Admission.SubjectInstructor");
m.MapLeftKey("StaffId");
m.MapRightKey("SubjectName");
});
modelBuilder.Entity<Staff>()
.HasMany(t => t.Departments)
.WithMany(t => t.Staffs)
.Map(m =>
{
m.ToTable("Admission.StaffDepartment");
m.MapLeftKey("StaffId");
m.MapRightKey("DepartmentId");
});
Database.SetInitializer<SchoolInfoEntities>(null);
}
}
有什么是我没有考虑到的吗?
您不能在不更新相关数据库字段的情况下更改模型字段。您需要创建一个迁移并应用它,以便使您的模型与数据库模式保持同步。
https://docs.asp.net/en/latest/data/ef-mvc/migrations.html如果您有数据库的生产版本,则需要在其上运行相同的迁移。
在运行应用程序之前,你需要在Package manager控制台上运行以下命令。
注意:您需要设置正确的连接字符串,您需要运行脚本的地方(db服务器)。
PM> Add-Migration "Added_New_Properties"
PM> Update-Database
由于您使用Code First, EntityFramework始终确保模型与数据库同步,当应用程序启动时,它将类及其属性与数据库中的表和列进行比较,并考虑到您在上下文中使用Fluent API所做的任何更改。
当你在任何类中添加一个新属性时,你必须在数据库表中添加一个对应的列来映射到这个类,或者你可以让EntityFramework通过Migration为你做这件事。
您必须首先使用Enable-Migrations
命令启用迁移
之后,运行命令Add-Migration [Migration Name]
,将模型与数据库进行比较,并在Migrations文件夹中生成一些代码来更新数据库,它应该有Up
和Down
方法。
要运行Up
方法,将数据库更新为代码,您必须运行Update-Database
命令。
所有这些命令必须在包管理器控制台中运行,你可以从Tools -> NuGet Package Manager -> Package Manager Console中找到。