【问题标题】:Can't access database when I change asp.net mvc model properties更改 asp.net mvc 模型属性时无法访问数据库
【发布时间】:2016-11-10 15:13:33
【问题描述】:

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

对于我的人模型:

列名“位置”无效。

列名“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);

        }
    }

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      PM> Add-Migration "Added_New_Properties"
      
      PM> Update-Database
      

      【讨论】:

      • 什么是“添加的新属性”?
      • 这是一个迁移脚本名称。你可以给它起任何名字。
      • 抱歉@Sampath 提供迟到的反馈。多亏了大家的支持,我才搞定了。你能看看这个吗:stackoverflow.com/questions/40663363/…
      • 很高兴听到它正在工作:) 希望你也能接受这个答案。这个或任何你喜欢的答案。在这里你可以看到如何做到这一点:stackoverflow.com/tour
      【解决方案3】:

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

      当您向任何类添加新属性时,您必须在数据库表中添加对应于该类的列,或者您可以使用 Migration 让 EntityFramework 为您完成。

      您必须先使用 Enable-Migrations 命令启用迁移

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

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

      所有这些命令都必须在包管理器控制台中运行,您可以从工具 -> NuGet 包管理器 -> 包管理器控制台访问。

      【讨论】:

        猜你喜欢
        • 2014-06-03
        • 2011-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多