Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据没有显示在特定的表中,只有一个表有数据_C#_Asp.net_Asp.net Mvc_Database_Visual Studio - Fatal编程技术网

C# 数据没有显示在特定的表中,只有一个表有数据

C# 数据没有显示在特定的表中,只有一个表有数据,c#,asp.net,asp.net-mvc,database,visual-studio,C#,Asp.net,Asp.net Mvc,Database,Visual Studio,出于某种原因,在学生表中只生成学生的数据。但是,注册和课程表中没有数据,即使我将它们添加到SchoolInitializer中。我错过什么了吗?有什么建议吗?启动应用程序时,我会关闭与数据库的连接,重建解决方案,然后在不进行调试的情况下启动,单击创建数据的链接,然后检查我的表 namespace MyFirstWebApplication.Models { public class SchoolInitializer : DropCreateDatabaseIfModelChanges&

出于某种原因,在学生表中只生成学生的数据。但是,注册和课程表中没有数据,即使我将它们添加到SchoolInitializer中。我错过什么了吗?有什么建议吗?启动应用程序时,我会关闭与数据库的连接,重建解决方案,然后在不进行调试的情况下启动,单击创建数据的链接,然后检查我的表

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

namespace MyFirstWebApplication
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            Database.SetInitializer<SchoolContext>(new SchoolInitializer() );
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }
}
名称空间MyFirstWebApplication.Models
{
公共类学校初始值设定项:DropCreateDatabaseIfModelChanges
{
受保护的覆盖无效种子(学校上下文)
{
var students=新列表
{
新学生{FirstName=“James”,LastName=“Dean”,registrmentdate=DateTime.Parse(“2014-01-02”),
新学生{FirstName=“Lynda”,LastName=“泰晤士河”,注册日期=DateTime.Parse(“2013-11-02”)}
};
foreach(学生中的var temp)
{
context.Students.Add(temp);
}
SaveChanges();
var课程=新列表
{
新课程{CourseName=“Java”,总学分=4},
新课程{CourseName=“C#”,总学分=4}
};
foreach(课程中的var temp)
{
上下文。课程。添加(临时);
}
SaveChanges();
var注册=新列表
{
新入学人数{StudentId=1,CourseId=1,年级=3},
新入学人数{StudentId=1,CourseId=2,年级=4}
};
foreach(注册中的var temp)
{
上下文。注册。添加(临时);
}
SaveChanges();
}
}
}
命名空间MyFirstWebApplication.Models
{
公共课堂背景:DbContext
{//启用CRUD功能
公共数据库集学生{get;set;}
公共数据库集课程{get;set;}
公共数据库集注册{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove();
}
}
}
命名空间MyFirstWebApplication
{
公共类MVC应用程序:System.Web.HttpApplication
{
受保护的无效应用程序\u Start()
{
SetInitializer(新的SchoolInitializer());
RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
}

请尝试在最后只调用一次
context.SaveChanges()

同时查看以下SO问题/答案:


如果您对密钥使用标识字段,则应获取生成的数据库密钥。例如,您应该使用:

var newStudent = context.Students.Add(new Student{...});
context.SaveChanges();
var newStudentId = newStudent.StudentId
然后,您可以使用此id插入您的注册。诸如此类:

context.Enrollments.Add(new Enrollment{StudentId = newStudentId, CourseId = 1, Grade = 3});
您必须考虑的另一件事是Seed方法调用savechanges方法


您应该查看添加或替换方法。在数据库中插入种子数据是首选方法。

我已经做了此更改,但是我的注册和课程表中仍然没有数据。当我查看完您为使用生成的数据库密钥而提供的链接后,我会再与您联系,这会有什么不同吗?看起来更像是一个“更好的实践”的建议哈哈。那是打字错误吗?你说“你要考虑的另一件事是seed方法做…”你是说seed方法做调用,所以我不必明确地说出来?不是很确定好吧,我发现了问题。就是这个方法:protectedoverridevidonmodel创建这个方法阻止我更新我的表和数据。有什么原因吗?例如,我在SchoolInitializer中为学生列表添加了一个新学生。重建并在未调试的情况下启动,并且我的页面未随新学员更新。我注释掉了该方法并重新生成,然后在不进行调试的情况下启动,列表随数据库中的表一起更新