【发布时间】:2021-04-23 17:39:07
【问题描述】:
我正在尝试创建一个不存在的数据库,但出现此错误:
SqlException:无效的对象名称“dbo.Course”
此错误发生在我的种子方法中的SaveChanges 方法调用中:
protected override void Seed(CollegeDbContext context)
{
_courses.ForEach(_ => context.Course.Add(_));
_subjects.ForEach(_ => context.Subject.Add(_));
_teachers.ForEach(_ => context.Teacher.Add(_));
_students.ForEach(_ => context.Student.Add(_));
context.SaveChanges();
}
我的初始化程序已使用 Database.Initializer 在 Application_Start() 上调用:
Database.SetInitializer(new CreateDatabaseIfNotExists<CollegeDbContext>());
就是这样实现的,种子方法没被调用所以我在构造函数中调用了。
public class CollegeInitializer : CreateDatabaseIfNotExists<CollegeDbContext>
{
private List<Student> _students;
private List<Teacher> _teachers;
private List<Subject> _subjects;
private List<Course> _courses;
private CollegeDbContext db;
public CollegeInitializer()
{
db = new CollegeDbContext();
if (db.Course == null)
return;
_students = GetMorningStudents().Concat(GetEveningStudents()).ToList();
_teachers = GetEveningTeachers().Concat(GetMorningTeachers()).ToList();
_subjects = GetSubjects();
_courses = GetCourses();
SetStudentsSubjects();
SetTeachersCourses();
Seed(db);
}
}
我什至在OnModelCreating 方法中指定了表名。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
var courseModel = modelBuilder.Entity<Course>();
courseModel.HasKey(_ => _.CourseId);
courseModel.HasMany(_ => _.Subjects).WithRequired(_ => _.Course);
courseModel.HasMany(_ => _.Students).WithRequired(_ => _.Course).WillCascadeOnDelete(false);
courseModel.HasMany(_ => _.Teachers).WithMany(_ => _.Courses);
courseModel.ToTable("Course");
var subjectModel = modelBuilder.Entity<Subject>();
subjectModel.HasKey(_ => _.SubjectId);
subjectModel.HasMany(_ => _.Students).WithMany(_ => _.Subjects);
subjectModel.HasRequired(_ => _.Teacher);
subjectModel.HasRequired(_ => _.Course).WithMany(_ => _.Subjects);
subjectModel.ToTable("Subject");
var studentModel = modelBuilder.Entity<Student>();
studentModel.HasKey(_ => _.RegistrationNumberId);
studentModel.HasMany(_ => _.Subjects).WithMany(_ => _.Students);
studentModel.HasRequired(_ => _.Course).WithMany(_ => _.Students).WillCascadeOnDelete(false);
studentModel.Property(_ => _.Name).IsRequired().HasMaxLength(20);
studentModel.ToTable("Student");
//studentModel.Map(_ =>
//{
// _.MapInheritedProperties();
//});
var teacherModel = modelBuilder.Entity<Teacher>();
teacherModel.HasKey(_ => _.TeacherId);
teacherModel.HasMany(_ => _.Courses).WithMany(m => m.Teachers);
teacherModel.Property(_ => _.Name).IsRequired().HasMaxLength(20);
teacherModel.ToTable("Teacher");
//teacherModel.Map(_ =>
//{
// _.MapInheritedProperties();
//});
}
所以如果我使用 IfDoesNotExist 它应该被创建,我做错了吗?
【问题讨论】:
-
首先要检查:数据库是新创建的,还是已经存在,有错误或没有)表?
-
@GertArnold 是的,他是创建的,我的一个朋友帮助解决了这个问题,问题是我使用了迁移,不知何故这让我无法使用初始化程序创建,我删除了迁移数据库然后程序开始使用种子方法和其他一切
标签: c# asp.net-mvc entity-framework-6