【问题标题】:Entity Framework 6 - SqlException: Invalid object name 'dbo.Course'实体框架 6 - SqlException:无效的对象名称“dbo.Course”
【发布时间】: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.InitializerApplication_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


【解决方案1】:

我删除了所有迁移信息,然后程序开始使用 Initializer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 2021-04-01
    相关资源
    最近更新 更多