【问题标题】:Method keeping me from using updated values and tables not updating方法阻止我使用更新的值和不更新的表
【发布时间】: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


【解决方案1】:

打开 Visual Studio 窗口,确保在 SchoolContext.OnModelBuilder 方法中没有注释掉任何内容...

  1. VS 打开,按Ctrl + Q
  2. 输入Package Manager Console然后回车
  3. 在应该出现的输出选项卡上,输入Update-Database

EntityFramework 应该做它的事情,并且你的值应该弹出


您还缺少 ConnectionString,这会导致您遇到与您列出的问题类似的奇怪问题...

确保您在我们的 App.Config 或 Web.Config...中有此设置...

<connectionStrings>
   <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=SchoolEtc;Integrated Security=True"
  providerName="System.Data.SqlClient" />
</connectionStrings>

接下来我需要你回到你身边SchoolContextclass

public class SchoolContext : DbContext
{
    public SchoolContext() : base("DefaultConnection")
    {}

   //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>();
    }
}

在你完成之后......

  1. 输入此快捷方式CTRL + Q... 输入Package Manager Console
  2. 输入Enable-Migrations
  3. 输入Add-Migration InitialMigration
  4. 输入Update-Database

之后您应该会看到更改。

【讨论】:

  • 它首先告诉我在程序集中没有找到迁移配置。告诉我使用启用迁移。然后它告诉我为两个不同的模型启用迁移。我应该这样做吗?
  • 是的...所以这就是你必须做的...输入Enable-Migrations回车..然后输入Add-Migration InitialMigration回车...然后输入更新-数据库
  • 抱歉,还是不行 :( 我不知道还能做什么
  • 不久前我回答了一个与您类似的问题,最好的办法是在控制台应用程序中单独使用实体框架从头开始。一旦您有了概念证明,请按照说明stackoverflow.com/questions/29905785/…工作你可以回到这里
  • 谢谢。我会回复你的。
猜你喜欢
  • 2021-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
  • 1970-01-01
相关资源
最近更新 更多