我无法使用 SQL Server Express 和实体框架创建数据库文件
Posted
技术标签:
【中文标题】我无法使用 SQL Server Express 和实体框架创建数据库文件【英文标题】:I cannot create a database file with SQL Server Express and Entity Framework 【发布时间】:2013-03-10 08:01:48 【问题描述】:我有以下代码:
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);
和
public class DataContext : DbContext
public DataContext() : base("xxdata")
protected override void OnModelCreating(DbModelBuilder modelBuilder)
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
public DbSet<Application> Applications get; set;
代码在我单步执行时被执行,但似乎没有创建数据库文件(SQL Server Express)。
有什么明显的我做错了吗?
【问题讨论】:
【参考方案1】:如下创建一个继承类;
public class DataContextInitializer : DropCreateDatabaseAlways<DataContext>
protected override void Seed(DataContext context)
//Seed data if you want
并将其添加到您的Global.asax
protected void Application_Start()
//Add your database initializer code
Database.SetInitializer(new DataContextInitializer());
【讨论】:
刚试过,它说“有一些无效的参数”。我会再调查一下。 @Gemma 查看我的更新。以前,您没有从DropCreateDatabaseAlways<T>
之类的类继承该类,现在可以随意放置该类。并检查它是否有效。此外,您不需要在此类中添加任何其他详细信息,因为您已经输入了CreateDatabase
。 EF 会自动为你创建。
我试过这个,但它似乎什么也没做。如果我在 Seed 方法中有一些东西,它只会起作用吗?也许我需要 DataContextInitializer 中的构造函数?
@Gemma 不,如果你不播种也没关系。告诉我你什么时候找数据库?在您尝试在其中添加某些内容之前,它不会被创建。尝试通过代码将Application
添加到数据库中。仅当您创建上下文类的实例或尝试在数据库中添加某些内容时,才会创建数据库。试试这个,我认为这是你的问题。
@Gemma 很高兴为您提供帮助...:)以上是关于我无法使用 SQL Server Express 和实体框架创建数据库文件的主要内容,如果未能解决你的问题,请参考以下文章
无法连接到 SQL Server 2008 Express 实例
无法安装 SQL Server 2008 R2 Express
我无法使用带有 Android Studio 的 JDBC 连接到 SQL Server Express
SQL Server Express 2012 错误:无法连接到本地数据库