Entity framework 我无法使用SQL Server Express和实体框架创建数据库文件
我有以下代码:Entity framework 我无法使用SQL Server Express和实体框架创建数据库文件,entity-framework,sql-server-express,Entity Framework,Sql Server Express,我有以下代码: public DataInitializer() { Database.SetInitializer<DataContext>(null); try { using (var context = new DataContext()) { if (!context.Database.Exists()) {
public DataInitializer() {
Database.SetInitializer<DataContext>(null);
try {
using (var context = new DataContext()) {
if (!context.Database.Exists())
{
((IObjectContextAdapter)context).ObjectContext.CreateDatabase();
}
}
}
catch (Exception ex) {
throw new InvalidOperationException("The Data database could not be initialized", ex);
}
}
公共数据初始值设定项(){
Database.SetInitializer(null);
试一试{
使用(var context=new DataContext()){
如果(!context.Database.Exists())
{
((IObjectContextAdapter)context.ObjectContext.CreateDatabase();
}
}
}
捕获(例外情况除外){
抛出新的InvalidOperationException(“无法初始化数据数据库”,ex);
}
}
及
公共类DataContext:DbContext
{
public DataContext():base(“xxdata”){}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove();
}
公共数据库集应用程序{get;set;}
}
代码在我单步执行时执行,但似乎没有创建任何数据库文件(SQLServerExpress)
是否有明显的错误?创建一个继承类,如下所示
public class DataContextInitializer : DropCreateDatabaseAlways<DataContext>
{
protected override void Seed(DataContext context)
{
//Seed data if you want
}
}
刚刚试过,它说“有一些无效的论点”。我将对此进行更深入的研究。@Gemma查看我的更新。以前,您没有从某个类继承该类,如
DropCreateDatabaseAlways
,现在可以根据需要放置该类。并且,您不需要在这个类中添加任何其他详细信息,因为您已经将CreateDatabase
。EF将自动为您创建它。我尝试过这个,但它似乎没有做什么。只有在Seed方法中有一些东西时它才会起作用吗?也许我需要DataContextInitializer中的构造函数?@Gemma不,如果你不做种子设定就可以了。告诉我你什么时候想要数据库?在您尝试添加某些内容之前,不会创建它。尝试通过代码将应用程序
添加到数据库中。只有在创建上下文类的实例或尝试在数据库中添加某些内容时,才会创建数据库。试试这个,我想这是你的问题。@Gemma很高兴帮助你…:)
public class DataContextInitializer : DropCreateDatabaseAlways<DataContext>
{
protected override void Seed(DataContext context)
{
//Seed data if you want
}
}
protected void Application_Start()
{
//Add your database initializer code
Database.SetInitializer(new DataContextInitializer());
}