当我改变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);
        }
    }

有什么是我没有考虑到的吗?

当我改变asp.net mvc模型属性时,不能访问数据库

您不能在不更新相关数据库字段的情况下更改模型字段。您需要创建一个迁移并应用它,以便使您的模型与数据库模式保持同步。

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文件夹中生成一些代码来更新数据库,它应该有UpDown方法。

要运行Up方法,将数据库更新为代码,您必须运行Update-Database命令。

所有这些命令必须在包管理器控制台中运行,你可以从Tools -> NuGet Package Manager -> Package Manager Console中找到。