【发布时间】:2015-07-20 18:26:10
【问题描述】:
我遇到了奇怪的错误。我正在使用 SchoolInitializer 播种数据,但我将数据推送到 Student 表而不是 Employee 和 Course 表中。我在学生列表中添加了一个新学生,但我的表格没有更新,我的视图也没有显示新学生。但是,我删除了受保护的覆盖 void OnModelCreating(DbModelBuilder modelBuilder) 方法,并使用新学生、课程和注册数据更新了我的表,并且视图显示了适当的信息。这种方法有什么我一无所知的事情还是某种巧合?我不断关闭与数据库的连接,清理重建,并在没有调试的情况下运行。
namespace MyFirstWebApplication.Models
{
public class SchoolInitializer : DropCreateDatabaseIfModelChanges<SchoolContext>
{
protected override void Seed(SchoolContext context)
{
var students = new List<Student>
{
new Student{FirstName = "James", LastName= "Dean", EnrollmentDate = DateTime.Parse("2014-01-02") },
new Student{FirstName = "Lynda", LastName = "Thames", EnrollmentDate = DateTime.Parse("2013-11-02")}
};
foreach (var temp in students)
{
context.Students.Add(temp);
}
context.SaveChanges();
var courses = new List<Course>
{
new Course{CourseName = "Java", TotalCredits = 4},
new Course{CourseName = "C#", TotalCredits = 4}
};
foreach (var temp in courses)
{
context.Courses.Add(temp);
}
//context.SaveChanges();
var enrollments = new List<Enrollment>
{
new Enrollment{StudentId = 1, CourseId = 1, Grade = 3},
new Enrollment{StudentId = 1, CourseId = 2, Grade = 4}
};
foreach (var temp in enrollments)
{
context.Enrollments.Add(temp);
}
context.SaveChanges();
}
}
}
namespace MyFirstWebApplication.Models
{
public class SchoolContext : DbContext
{ //enables CRUD functionality
public DbSet<Student> Students { get; set; }
public DbSet<Course> Courses { get; set; }
public DbSet<Enrollment> Enrollments { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
}
【问题讨论】:
-
为什么要删除 onmodelbuilder?您如何尝试初始化它?通过 Nuget 包管理器?
-
我删除了 OnModelCreating 因为它对我来说是未知代码。我知道它删除了一些默认约定,但我不确定它是否有一些我不知道的属性,因为它正在被覆盖
-
没关系。即使它被注释掉了,并且在最初注释掉之后我一直在添加更多数据,表格仍然没有更新:/所以我想这是巧合
-
如果您使用 CodeFirst,OnModelBuilder 很重要,而且您的种子值也不会更新,因为您没有更新数据库
-
好的,这就是正在发生的事情。我制作数据,我评论该方法,数据得到更新。我不断添加新学生,视图或表格没有发生任何变化。我取消注释该方法,数据得到更新。什么鬼?
标签: c# asp.net entity-framework visual-studio