我正在开发一个项目,我对我的模型进行了更改,现在每当我运行我的项目时,我都会得到我修改过的所有模型的这些错误:
for model模型:
无效的列名‘位置’。 无效列名“电子邮件地址”。 无效列名“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);
}
}有什么我没考虑的吗?请帮帮我伙计们。
发布于 2016-11-09 15:14:23
如果不更新相关的数据库字段,则无法更改模型字段。您需要创建一个迁移并应用它,以使您的模型与数据库架构保持同步。
https://docs.asp.net/en/latest/data/ef-mvc/migrations.html
如果您有数据库的生产版本,则需要在其上运行相同的迁移。
发布于 2016-11-09 16:16:35
在运行应用程序之前,您需要在包Manger控制台上运行以下命令。
注意:,您需要在需要运行脚本的位置(db服务器)设置正确的连接字符串。
PM> Add-Migration "Added_New_Properties"
PM> Update-Database发布于 2016-11-10 07:13:33
由于您首先使用代码,所以EntityFramework始终确保模型与数据库同步,在应用程序启动时,它将类及其属性与数据库中的表和列进行比较,同时考虑到在上下文中使用Fluent API所做的任何更改。
当您将一个新属性添加到任何类中时,您必须在数据库表中添加对应的列,该列映射到该类,或者可以通过使用迁移让EntityFramework为您完成这一任务。
您必须首先使用Enable-Migrations命令进行迁移。
然后,运行命令Add-Migration [Migration Name],将模型与数据库进行比较,并在Migrations文件夹中生成一些代码来更新数据库,它应该有一个Up和Down方法。
要运行将数据库更新为代码的Up方法,必须运行Update-Database命令。
所有这些命令都必须在Package控制台中运行,您可以从Tools -> NuGet Package -> Package控制台到达该控制台。
https://stackoverflow.com/questions/40510206
复制相似问题