更改asp.net mvc模型属性

时间:2016-11-09 15:11:22

标签: c# asp.net-mvc entity-framework

我正在开发一个项目,我对我的模型进行了更改,现在每当我运行项目时,我都会对所有更改的模型出现这些错误:

为我的人模型:

  

无效的列名称“位置”。

     

无效的列名称'EmailAddress'。

     

无效的列名称'PlaceOfBirth'。

我的监护人模特:

  

无效的对象名称'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);

        }
    }

有什么我不考虑的吗?请帮帮我们。

3 个答案:

答案 0 :(得分:2)

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

https://docs.asp.net/en/latest/data/ef-mvc/migrations.html

如果您拥有数据库的生产版本,则需要在其上运行相同的迁移。

答案 1 :(得分:1)

在运行应用之前,您需要在 Package Manger控制台上运行以下命令。

注意:您需要在运行脚本所需的位置(数据库服务器)中设置正确的连接字符串。

PM> Add-Migration "Added_New_Properties"

PM> Update-Database

答案 2 :(得分:1)

由于您使用的是Code First,因此EntityFramework始终确保模型与数据库同步,当应用程序启动时,它会将类及其属性与数据库中的表和列进行比较,并考虑您所做的任何更改在Context中使用Fluent API。

当您向任何类添加新属性时,您必须在数据库表中添加映射到此类的相应列,或者您可以让EntityFramework使用Migration为您执行此操作。

您必须先使用Enable-Migrations命令

进行迁移

之后,运行命令Add-Migration [Migration Name],它将模型与数据库进行比较,并在Migrations文件夹中生成一些代码来更新数据库,它应该有UpDown方法

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

所有这些命令必须在Package Manager控制台中运行,您可以从Tools - &gt; NuGet包管理器 - &gt;包管理器控制台。