Entity Framework 6 代码优先方法没有自动创建我的数据库?
My database is not getting automatically created by Entity Framework 6 code-first approach?
我正在尝试使用代码优先方法为在线考试系统创建一个数据库。我已经创建了我的数据模型,我的上下文 class,在 Global.asax
文件中添加了我的 setInitializer
方法,添加了我的连接字符串。
但是仍然没有创建数据库。真的需要一些帮助。
我的连接字符串:
<connectionStrings>
<add name="ExamDbContext"
connectionString="server=LAPTOP-JJKI9JN7; Initial Catalog=OnlineExamSystem; Integrated Security=true;"
providerName="System.Data.SqlClient">
</add>
</connectionStrings>
LAPTOP-JJKI9JN7
是我的 SSMS 服务器名称
学生 table:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace Online_Exam_System.Models
{
public class TBL_STUDENT
{
public int S_ID { get; set; }
[Display(Name = "Student")]
[Required(ErrorMessage = "The field is required")]
public string S_NAME { get; set; }
[Display(Name = "Password")]
[Required(ErrorMessage = "The field is required")]
public string S_PASSWORD { get; set; }
[Display(Name = "Marks")]
[Required(ErrorMessage = "The field is required")]
public Nullable<int> S_MARKS { get; set; }
}
}
问题 table :
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace Online_Exam_System.Models
{
public class TBL_QUESTIONS
{
public int QUESTION_ID { get; set; }
[Display(Name = "Question")]
[Required(ErrorMessage = "The field is required")]
public string QUESTION_TEXT { get; set; }
public string OPTION { get; set; }
[Display(Name = "OPTION A")]
[Required(ErrorMessage = "The field is required")]
public string OPTIONA { get; set; }
[Display(Name = "OPTION B")]
[Required(ErrorMessage = "The field is required")]
public string OPTIONB { get; set; }
[Display(Name = "OPTION C")]
[Required(ErrorMessage = "The field is required")]
public string OPTIONC { get; set; }
[Display(Name = "OPTION D")]
[Required(ErrorMessage = "The field is required")]
public string OPTIOND { get; set; }
public string CORRECT { get; set; }
}
}
管理员 table:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace Online_Exam_System.Models
{
public class TBL_ADMIN
{
public int AD_ID { get; set; }
[Display(Name = "User Name")]
[Required(ErrorMessage = "The field is required")]
public string AD_NAME { get; set; }
[Display(Name = "Password")]
[Required(ErrorMessage = "The field is required")]
[DataType(DataType.Password)]
public string AD_PASSWORD { get; set; }
}
}
我的背景class
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using Online_Exam_System.Models;
using System.Linq;
using System.Web;
using System.Data.Entity.ModelConfiguration.Conventions;
namespace Online_Exam_System.Data_Access_Layer
{
public class ExamDbContext : DbContext
{
public ExamDbContext() : base("ExamDbContext")
{
}
public DbSet<TBL_ADMIN> TBL_ADMIN { get; set; }
public DbSet<TBL_QUESTIONS> TBL_QUESTIONS { get; set; }
public DbSet<TBL_EXAM> TBL_SETEXAM { get; set; }
public DbSet<TBL_STUDENT> TBL_STUDENT { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
}
我的初始化方法(在 Model
文件夹中)
using Online_Exam_System.Data_Access_Layer;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
namespace Online_Exam_System.Models
{
public class ExamInitializer : CreateDatabaseIfNotExists<ExamDbContext>
{
protected override void Seed(ExamDbContext context)
{
base.Seed(context);
}
}
}
Global.asax
文件:
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
namespace Online_Exam_System
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
Database.SetInitializer(new
NullDatabaseInitializer<ExamDbContext>());
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters
(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
设置初始化程序后,通过访问某处的上下文或强制它来强制它 运行:
Database.SetInitializer(new NullDatabaseInitializer<ExamDbContext>());
// Forces initialization of database on model changes.
using (var context= new ExamDbContext ()) {
context.Database.Initialize(false);
}
Forcing code-first to always initialize a non-existent database?
我正在尝试使用代码优先方法为在线考试系统创建一个数据库。我已经创建了我的数据模型,我的上下文 class,在 Global.asax
文件中添加了我的 setInitializer
方法,添加了我的连接字符串。
但是仍然没有创建数据库。真的需要一些帮助。
我的连接字符串:
<connectionStrings>
<add name="ExamDbContext"
connectionString="server=LAPTOP-JJKI9JN7; Initial Catalog=OnlineExamSystem; Integrated Security=true;"
providerName="System.Data.SqlClient">
</add>
</connectionStrings>
LAPTOP-JJKI9JN7
是我的 SSMS 服务器名称
学生 table:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace Online_Exam_System.Models
{
public class TBL_STUDENT
{
public int S_ID { get; set; }
[Display(Name = "Student")]
[Required(ErrorMessage = "The field is required")]
public string S_NAME { get; set; }
[Display(Name = "Password")]
[Required(ErrorMessage = "The field is required")]
public string S_PASSWORD { get; set; }
[Display(Name = "Marks")]
[Required(ErrorMessage = "The field is required")]
public Nullable<int> S_MARKS { get; set; }
}
}
问题 table :
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace Online_Exam_System.Models
{
public class TBL_QUESTIONS
{
public int QUESTION_ID { get; set; }
[Display(Name = "Question")]
[Required(ErrorMessage = "The field is required")]
public string QUESTION_TEXT { get; set; }
public string OPTION { get; set; }
[Display(Name = "OPTION A")]
[Required(ErrorMessage = "The field is required")]
public string OPTIONA { get; set; }
[Display(Name = "OPTION B")]
[Required(ErrorMessage = "The field is required")]
public string OPTIONB { get; set; }
[Display(Name = "OPTION C")]
[Required(ErrorMessage = "The field is required")]
public string OPTIONC { get; set; }
[Display(Name = "OPTION D")]
[Required(ErrorMessage = "The field is required")]
public string OPTIOND { get; set; }
public string CORRECT { get; set; }
}
}
管理员 table:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace Online_Exam_System.Models
{
public class TBL_ADMIN
{
public int AD_ID { get; set; }
[Display(Name = "User Name")]
[Required(ErrorMessage = "The field is required")]
public string AD_NAME { get; set; }
[Display(Name = "Password")]
[Required(ErrorMessage = "The field is required")]
[DataType(DataType.Password)]
public string AD_PASSWORD { get; set; }
}
}
我的背景class
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using Online_Exam_System.Models;
using System.Linq;
using System.Web;
using System.Data.Entity.ModelConfiguration.Conventions;
namespace Online_Exam_System.Data_Access_Layer
{
public class ExamDbContext : DbContext
{
public ExamDbContext() : base("ExamDbContext")
{
}
public DbSet<TBL_ADMIN> TBL_ADMIN { get; set; }
public DbSet<TBL_QUESTIONS> TBL_QUESTIONS { get; set; }
public DbSet<TBL_EXAM> TBL_SETEXAM { get; set; }
public DbSet<TBL_STUDENT> TBL_STUDENT { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
}
我的初始化方法(在 Model
文件夹中)
using Online_Exam_System.Data_Access_Layer;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
namespace Online_Exam_System.Models
{
public class ExamInitializer : CreateDatabaseIfNotExists<ExamDbContext>
{
protected override void Seed(ExamDbContext context)
{
base.Seed(context);
}
}
}
Global.asax
文件:
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
namespace Online_Exam_System
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
Database.SetInitializer(new
NullDatabaseInitializer<ExamDbContext>());
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters
(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
设置初始化程序后,通过访问某处的上下文或强制它来强制它 运行:
Database.SetInitializer(new NullDatabaseInitializer<ExamDbContext>());
// Forces initialization of database on model changes.
using (var context= new ExamDbContext ()) {
context.Database.Initialize(false);
}
Forcing code-first to always initialize a non-existent database?